在unittest框架中,默认情况下,测试用例须以test开头
但一定是需要以test_开头吗?
答案:不是
在unittest中,用例以什么开头是可以自定义的,通过修改源码的方法。
我们知道,用例的加载时unittest中的 test loader 实现的。
在loader.py模块中,有一个TestLoader类。类中有一个testMethodPrefix的属性,默认是test
当我们改成‘aaa’时,aaa开头的测试用例将会被收集和装载:
loader.py文件
class TestLoader(object): """ This class is responsible for loading tests according to various criteria and returning them wrapped in a TestSuite """ testMethodPrefix = 'aaa' sortTestMethodsUsing = staticmethod(util.three_way_cmp) testNamePatterns = None suiteClass = suite.TestSuite _top_level_dir = None
我们来写一个aaa开头的用例示例并执行:
test_prac1.py import unittest class TestPra1(unittest.TestCase): def setUp(self): print("this is setUp") def tearDown(self): print("this is tearDown") def aaa_1(self): self.assertEqual(2, 4)
test_prac2.py import unittest class TestPra2(unittest.TestCase): def setUp(self): print("this is setUp") def tearDown(self): print("this is tearDown") def aaa_2(self): self.assertEqual(2, 4)
执行结果如下:
this is setUp this is tearDown this is setUp this is tearDown FF ====================================================================== FAIL: aaa_1 (test_pra1.TestPra1) ---------------------------------------------------------------------- Traceback (most recent call last): File "E:\unitPrac\test_pra1.py", line 16, in aaa_1 self.assertEqual(2, 4) AssertionError: 2 != 4 ====================================================================== FAIL: aaa_2 (test_pra2.TestPra2) ---------------------------------------------------------------------- Traceback (most recent call last): File "E:\unitPrac\test_pra2.py", line 17, in aaa_2 self.assertEqual(2, 4) AssertionError: 2 != 4 ---------------------------------------------------------------------- Ran 2 tests in 0.000s FAILED (failures=2) Process finished with exit code 1
我们可以看到aaa_1和aaa_2都被执行了。
说明,收集用例的规则是可以通过loader模块的TestLoader类中的类属性testMethodPrefix来修改的。