2
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)

我试图在一次运行中运行两个类中的所有方法。但是,上面的代码并没有这样做。在套件功能中,我尝试从类中添加多个测试,但这也不起作用并且出现错误。

4

1 回答 1

2

这个问题“ PyUnit 中不推荐使用测试套件吗? ”的答案:

“如果您想在单个模块中运行所有测试,则不需要 unittest.TestSuite,因为 unittest.main() 将动态检查调用它的模块并查找从 unittest.TestCase 派生的所有类。”

该答案中还有更多关于unittest.TestSuite何时有用的信息。

也就是说,我需要进行一些更改才能使这些测试正常工作。首先,unittest在开始时查找带有“test_”的函数。此外,应该使用unittest 的assertEqual 和类似方法,而不仅仅是Python 的 assert 语句。这样做并消除一些不需要的代码会导致:

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 次失败),为了篇幅,我不会在这里重现。

于 2012-09-14T19:35:37.457 回答