您應該使用py.test
,我覺得unittest模塊盲目地從JUnit的複製,反正你可以破解你的方式是這樣
import unittest
data = [
(2, True),
(3, False),
(4, True),
(5, False)]
# this should be imported from a separate module.
def isEven(number):
return True # quite buggy implementation
def create_test_func(num, expected):
def _test_func(self):
self.assertEqual(expected, isEven(num))
return _test_func
class TestIsEven(unittest.TestCase):
pass
# pyunit isn't pythonic enought use py.test instead
# till then we rely on such hackery
import new
for i, (num, expected) in enumerate(data):
setattr(TestIsEven, 'test_data_%d'%i, create_test_func(num, expected))
if __name__ == "__main__":
unittest.main()
和輸出:
.F.F
======================================================================
FAIL: test_data_1 (__main__.TestIsEven)
----------------------------------------------------------------------
Traceback (most recent call last):
File "untitled-1.py", line 15, in _test_func
self.assertEqual(expected, isEven(num))
AssertionError: False != True
======================================================================
FAIL: test_data_3 (__main__.TestIsEven)
----------------------------------------------------------------------
Traceback (most recent call last):
File "untitled-1.py", line 15, in _test_func
self.assertEqual(expected, isEven(num))
AssertionError: False != True
----------------------------------------------------------------------
Ran 4 tests in 0.000s
FAILED (failures=2)
使用這種方法你可以添加更多的細節,如打印調試失敗信息等
+1,關於'我認爲unittest模塊被盲目地從junit複製過來,它是不是唯一一個從java-like複製過來的:) – mouad 2011-06-15 07:13:50