import unittest
import HTMLTestRunner
class TestClass1(unittest.TestCase):
def setUp(self):
pass
def case1(self):
assert 4 == 3
def case2(self):
assert 4 == 4
def tearDown(self):
pass
class TestClass2(unittest.TestCase):
def setUp(self):
pass
def case3(self):
assert 1 == 2
def tearDown(self):
pass
def suite():
suite = unittest.TestSuite()
suite.addTest(TestClass1(['case1','case2']))
suite.addTest(TestClass2('case4'))
return suite
test_suite = suite()
unittest.TextTestRunner(verbosity=2).run(test_suite)
fp = file('my_report.html', 'wb')
runner = HTMLTestRunner.HTMLTestRunner(
stream=fp,
title='My unit test',
description='This demonstrates the report output by HTMLTestRunner.'
)
runner.run(test_suite)
我试图在一次运行中运行两个类中的所有方法。然而,上面的代码并没有这样做。在套件功能中,我尝试从类中添加多个测试,但这也不起作用并且给出了错误。
最佳答案
来自this answer在问题“Is test suite deprecated in PyUnit?”:
“如果您想在单个模块中运行所有测试,则不需要unittest.TestSuite,因为unittest.main()将动态检查调用它的模块并查找从unittest.TestCase派生的所有类。”
该答案中有更多关于何时 unittest.TestSuite 的内容。很有用。
也就是说,我需要进行一些更改才能使这些测试正常工作。首先unittest查找以“test_”开头的函数。另外,单元测试的assertEqual and similar methods应该使用,而不仅仅是 Python's assert statement 。这样做并消除了一些不需要的代码导致:
import unittest
class TestClass1(unittest.TestCase):
def test_case1(self):
self.assertEqual(4, 3)
def test_case2(self):
self.assertEqual(4, 4)
class TestClass2(unittest.TestCase):
def test_case3(self):
self.assertEqual(1, 2)
unittest.main()
这产生了适当的输出(3 个测试运行,2 个失败),出于篇幅的考虑,我不会在此处重现该输出。
关于python - PyUnit : How to run all tests from different unittest. 文件中存在 TestCase 子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12430385/