如何为Python非类成员函数编写测试函数并实现自动发现
没问题!其实unittest虽然常见用法是基于测试类,但完全可以用来测试独立函数,而且自动测试发现也很容易实现。下面一步步给你讲清楚:
1. 编写针对extract_frame_dr的测试用例
首先创建一个测试文件(命名要符合test_*.py的规范,比如test_readTool.py),在里面用unittest的测试类包裹测试逻辑,调用你的独立函数并做断言验证。
假设你的dr是numpy数组(从索引方式dr[0, frameID]推测),测试代码示例如下:
import unittest import numpy as np from readTool import extract_frame_dr class TestExtractFrameDr(unittest.TestCase): def test_basic_frame_extraction(self): # 构造测试用的2行多列数组 test_dr = np.array([[10, 20, 30], [100, 200, 300]]) frame_id = 1 # 预期结果:第1列的两个元素 expected = (20, 200) # 调用目标函数 result = extract_frame_dr(test_dr, frame_id) # 断言结果匹配 self.assertEqual(result, expected) def test_edge_case_first_frame(self): test_dr = np.array([[5], [50]]) frame_id = 0 expected = (5, 50) result = extract_frame_dr(test_dr, frame_id) self.assertEqual(result, expected) def test_edge_case_last_frame(self): test_dr = np.array([[1, 2, 3], [11, 22, 33]]) frame_id = 2 expected = (3, 33) result = extract_frame_dr(test_dr, frame_id) self.assertEqual(result, expected) # 单独运行测试文件时的入口 if __name__ == '__main__': unittest.main()
如果你的dr是其他可索引结构(比如列表的列表),只需要调整test_dr的构造方式即可,断言逻辑完全通用。
2. 实现自动测试发现(无需逐个调用)
unittest自带自动发现机制,只要你的测试文件命名符合test_*.py规范,就能一次性运行所有测试,有两种常用方式:
方式一:用命令行直接触发
在项目根目录打开终端,执行以下命令:
python -m unittest discover
这个命令会自动扫描当前目录及子目录下所有test_*.py文件,运行里面的所有测试用例。
如果你的测试文件放在单独的tests文件夹里,可以指定目录和匹配规则:
python -m unittest discover -s tests -p "test_*.py"
-s:指定测试文件所在的根目录-p:指定测试文件的命名匹配模式
方式二:编写一个统一的测试运行脚本
在项目根目录创建run_tests.py,内容如下:
import unittest if __name__ == '__main__': # 自动发现所有符合规则的测试用例 test_loader = unittest.TestLoader() test_suite = test_loader.discover(start_dir='.', pattern='test_*.py') # 运行测试并输出结果 test_runner = unittest.TextTestRunner(verbosity=2) test_runner.run(test_suite)
之后只要运行python run_tests.py,就能一次性执行所有测试,还能通过verbosity参数控制输出详细程度。
补充:测试异常场景(可选)
如果你的函数需要处理frameID超出范围的情况,可以添加异常测试用例:
def test_invalid_frame_id(self): test_dr = np.array([[1,2], [11,22]]) # 测试超出最大索引的frameID with self.assertRaises(IndexError): extract_frame_dr(test_dr, 2)
内容的提问来源于stack exchange,提问作者zheyuanWang
相关产品推荐
相关产品推荐

