我想出了這個。嘗試了@big_gie提交的代碼。這樣,setUp和tearDown也將按照單元測試規則運行。
import unittest
def generator(test_class, a, b): def test(self): self.assertEqual(a, b) return test
def add_test_methods(test_class): test_list = [[2,3, 'one'], [5,5, 'two'], [0,0, 'three']] for case in test_list: test = generator(test_class, case[0], case[1]) setattr(test_class, "test_%s" % case[2], test)
class TestIO(unittest.TestCase):
def setUp(self): print 'Setup' pass
def tearDown(self): print 'TearDown' pass
add_test_methods(TestIO)
if __name__ == '__main__':
unittest.main(verbosity=1)
結果:
>>>
Setup
FTearDown
Setup
TearDown
.Setup
TearDown
.
======================================================================
FAIL: test_one (__main__.TestIO)
----------------------------------------------------------------------
Traceback (most recent call last):
File "D:/inchowar/Desktop/PyTrash/test_auto_3.py", line 5, in test
self.assertEqual(a, b)
AssertionError: 2 != 3
----------------------------------------------------------------------
Ran 3 tests in 0.019s
FAILED (failures=1)
您可以用'py.test'做到這一點。但是,究竟是什麼讓'subTest'成爲問題呢?它似乎是做你想做的? – 2014-08-27 21:02:25
'subTest'接近,但不完全;每個 元素實際上是軟件的單元測試結果。我想匹配兩邊的測試,沒有一堆測試從軟件匹配到python中的單個測試... –
2014-08-27 21:04:34