试图实现python TestSuite

时间:2012-08-17 18:15:37

标签: python unit-testing regression-testing test-suite python-unittest

我想在测试套件中一起运行两个测试用例(两个不同的文件)。我可以通过“正常”运行python来运行测试但是当我选择运行python-unit测试时它会说0个测试运行。现在我只想尝试至少进行一次测试才能正确运行。

import usertest
import configtest # first test
import unittest   # second test

testSuite = unittest.TestSuite()
testResult = unittest.TestResult()
confTest = configtest.ConfigTestCase()
testSuite.addTest(configtest.suite())
test = testSuite.run(testResult)
print testResult.testsRun # prints 1 if run "normally"

以下是我的测试用例设置示例

class ConfigTestCase(unittest.TestCase):
    def setUp(self):

        ##set up code

    def runTest(self):

        #runs test


def suite():
    """
        Gather all the tests from this module in a test suite.
    """
    test_suite = unittest.TestSuite()
    test_suite.addTest(unittest.makeSuite(ConfigTestCase))
    return test_suite

if __name__ == "__main__":
    #So you can run tests from this module individually.
    unittest.main()

我需要做些什么才能正常工作?

4 个答案:

答案 0 :(得分:44)

你想使用一件套装。所以你不需要调用unittest.main()。 使用testuit应该是这样的:

#import usertest
#import configtest # first test
import unittest   # second test

class ConfigTestCase(unittest.TestCase):
    def setUp(self):
        print 'stp'
        ##set up code

    def runTest(self):
        #runs test
        print 'stp'

def suite():
    """
        Gather all the tests from this module in a test suite.
    """
    test_suite = unittest.TestSuite()
    test_suite.addTest(unittest.makeSuite(ConfigTestCase))
    return test_suite

mySuit=suite()

runner=unittest.TextTestRunner()
runner.run(mySuit)

答案 1 :(得分:8)

创建加载器和套件的所有代码都是不必要的。您应该编写测试,以便通过使用您最喜欢的测试运行器的测试发现来运行它们。这只是意味着以标准方式命名您的方法,将它们放在可导入的位置(或将包含它们的文件夹传递给运行程序),并继承自unittest.TestCase。完成后,您可以使用最简单或更好的第三方运动员python -m unittest discover来发现并运行您的测试。

答案 2 :(得分:1)

我假设你指的是对整合两个测试的模块运行python-unit测试。如果您为该模块创建测试用例,它将起作用。子类化unittest.TestCase并进行一个以“test”开头的简单测试。

e.g。

class testall(unittest.TestCase):

    def test_all(self):           
        testSuite = unittest.TestSuite()
        testResult = unittest.TestResult()
        confTest = configtest.ConfigTestCase()
        testSuite.addTest(configtest.suite())
        test = testSuite.run(testResult)
        print testResult.testsRun # prints 1 if run "normally"

if __name__ == "__main__": 
      unittest.main()

答案 3 :(得分:1)

如果您尝试手动收集TestCase,这很有用:unittest.loader.findTestCases()

# Given a module, M, with tests:
mySuite = unittest.loader.findTestCases(M)
runner = unittest.TextTestRunner()
runner.run(mySuit)