【发布时间】:2015-12-23 05:00:45
【问题描述】:
如何创建多个测试用例并以编程方式运行它们?我正在尝试在一个常见的 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
【问题讨论】:
标签: python unit-testing python-3.x inheritance python-unittest