大多数测试框架假设“1test=1python方法/函数”,
当函数在没有
提出主张。在
我正在测试一个类似编译器的程序(一个读取*.foo的程序)
文件并处理它们的内容),我想对许多输入(*.foo)文件执行相同的测试。我的测试看起来像:class Test(unittest.TestCase):
def one_file(self, filename):
# do the actual test
def list_testcases(self):
# essentially os.listdir('tests/') and filter *.foo files.
def test_all(self):
for f in self.list_testcases():
one_file(f)
我当前的代码使用
unittest来自
Python的标准库,即one_file使用self.assert...(...)
语句来检查测试是否通过。在
从某种意义上说,这是可行的,我确实得到了一个成功/失败的程序
当我的代码没问题,但我失去了
测试框架:我没有得到像“Y测试中的X个失败”这样的相关报告,也没有
通过/失败测试的列表。(我计划使用这样的系统
不仅是为了测试我自己的发展,也为了给学生的代码评分
作为一名教师,报告对我来说很重要)
我没有测试独立性。第二个测试在
环境留下的第一个,等等。第一次故障停止
testsuite:失败后的测试用例根本不运行。
我觉得我在滥用我的测试框架:只有
一个测试功能,这样单元测试声音的自动测试发现
例如过度杀戮。同样的代码可以(应该?)写在
带有基本assert的普通Python。
一个明显的替代方法是将我的代码改为
^{pr2}$
然后,我又获得了unittest的所有优点,但是:要写的代码多得多。
很容易“忘记”一个测试用例,即在
tests/并忘记将其添加到Python测试中。
我可以想象一个解决方案,其中我将动态地为每个测试用例生成一个方法(沿着setattr(self, 'test_file' + str(n), ...))的行来生成第二个解决方案的代码,而不必手工编写它。但是对于一个看起来并不复杂的用例来说,这听起来真的是太过分了。在
我怎样才能两者兼得呢。
自动测试用例发现(列出tests/*.foo文件),测试
独立性和适当的报告?在