我在學習Python,並一直試圖更多地瞭解Python的unittest
模塊的細節。文檔包括以下內容:使用Python unittest,我該如何創建並使用「可返回測試套件的可調用對象」?
爲便於運行測試,因爲我們 將在後面看到,這是一個好主意, 每個測試模塊中提供一個可調用 對象返回已創建測試 套件:
def suite(): suite = unittest.TestSuite() suite.addTest(WidgetTestCase('testDefaultSize')) suite.addTest(WidgetTestCase('testResize')) return suite
至於我可以告訴大家,這樣做的目的不是解釋。另外,我無法弄清楚如何使用這種方法。我試過幾件事情沒有成功(除了學習,我得到了錯誤消息):
import unittest
def average(values):
return sum(values)/len(values)
class MyTestCase(unittest.TestCase):
def testFoo(self):
self.assertEqual(average([10,100]),55)
def testBar(self):
self.assertEqual(average([11]),11)
def testBaz(self):
self.assertEqual(average([20,20]),20)
def suite():
suite = unittest.TestSuite()
suite.addTest(MyTestCase('testFoo'))
suite.addTest(MyTestCase('testBar'))
suite.addTest(MyTestCase('testBaz'))
return suite
if __name__ == '__main__':
# s = MyTestCase.suite()
# TypeError: unbound method suite() must be called
# with MyTestCase instance as first argument
# s = MyTestCase.suite(MyTestCase())
# ValueError: no such test method in <class '__main__.MyTestCase'>: runTest
# s = MyTestCase.suite(MyTestCase('testFoo'))
# TypeError: suite() takes no arguments (1 given)
下面的「工作」,但似乎尷尬,它要求我改變的suite()
方法簽名爲「def suite(self):
」。
s = MyTestCase('testFoo').suite()
unittest.TextTestRunner().run(s)