在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來修改的。