如何創建多個TestCases並以編程方式運行它們?我試圖在一個普通的TestCase上測試一個集合的多個實現。通過繼承Python的參數化unittest TestCase
我寧願堅持單元測試,並避免依賴。
這裏的一些資源,我看着這並不太符合我想要的東西:
Writing a re-usable parametrized unittest.TestCase method - 接受的答案提出了四種不同的外部庫。
http://eli.thegreenplace.net/2011/08/02/python-unit-testing-parametrized-test-cases - 此方法使用靜態方法
paramerize
。我不明白你爲什麼不能直接傳入參數TestSubClass.__init__
。How to generate dynamic (parametrized) unit tests in python? - 有點太黑魔法。
這是最小的(非)工作示例。
import unittest
MyCollection = set
AnotherCollection = set
# ... many more collections
def maximise(collection, array):
return 2
class TestSubClass(unittest.TestCase):
def __init__(self, collection_class):
unittest.TestCase.__init__(self)
self.collection_class = collection_class
self.maximise_fn = lambda array: maximise(collection_class, array)
def test_single(self):
self.assertEqual(self.maximise_fn([1]), 1)
def test_overflow(self):
self.assertEqual(self.maximise_fn([3]), 1)
# ... many more tests
def run_suite():
suite = unittest.defaultTestLoader
for collection in [MyCollection, AnotherCollection]:
suite.loadTestsFromTestCase(TestSubClass(collection))
unittest.TextTestRunner().run(suite)
def main():
run_suite()
if __name__ == '__main__':
main()
上述方法的錯誤與loadTestsFromTestCase
:
TypeError: issubclass() arg 1 must be a class
不錯,mixin的想法是關於完美的。這有點重複,但很清楚。 – Joe
CPython測試套件使用mixin方法來測試例如C和Python實現,或者例如對於多個類通用的測試,例如unicode和字節或元組和列表(甚至範圍)或集合和frozense 。 –
@JoeS,感謝您的編輯。 :) – falsetru