sta*_*005 8 python unit-testing testcase
我在不同的文件夹中有十几个测试用例.在根目录中有一个测试运行器.
unittest\
package1\
test1.py
test2.py
package2\
test3.py
test4.py
testrunner.py
Run Code Online (Sandbox Code Playgroud)
目前,我手动将四个测试用例添加到测试套件中
import unittest
from package1.test1 import Test1
from package1.test2 import Test2
from package2.test3 import Test3
from package2.test4 import Test4
suite = unittest.TestSuite()
suite.addTests(unittest.makeSuite(Test1))
suite.addTests(unittest.makeSuite(Test2))
suite.addTests(unittest.makeSuite(Test3))
suite.addTests(unittest.makeSuite(Test4))
result = unittest.TextTestRunner(verbosity=2).run(suite)
if not result.wasSuccessful():
sys.exit(1)
Run Code Online (Sandbox Code Playgroud)
如何让测试运行器自动测试所有测试用例?如:
for testCase in findTestCases():
suite.addTests(testCase)
Run Code Online (Sandbox Code Playgroud)
上面的模块很好,但NoseTests在尝试输入参数时会很有趣,而且速度更快,更适合其他模块.
import os, unittest
class Tests():
def suite(self): #Function stores all the modules to be tested
modules_to_test = []
test_dir = os.listdir('.')
for test in test_dir:
if test.startswith('test') and test.endswith('.py'):
modules_to_test.append(test.rstrip('.py'))
alltests = unittest.TestSuite()
for module in map(__import__, modules_to_test):
module.testvars = ["variables you want to pass through"]
alltests.addTest(unittest.findTestCases(module))
return alltests
if __name__ == '__main__':
MyTests = Tests()
unittest.main(defaultTest='MyTests.suite')
Run Code Online (Sandbox Code Playgroud)
如果要将结果添加到日志文件,请在最后添加:
if __name__ == '__main__':
MyTests = Tests()
log_file = 'log_file.txt'
f = open(log_file, "w")
runner = unittest.TextTestRunner(f)
unittest.main(defaultTest='MyTests.suite', testRunner=runner)
Run Code Online (Sandbox Code Playgroud)
同样在模块的底部,您正在测试这样的地方代码:
class SomeTestSuite(unittest.TestSuite):
# Tests to be tested by test suite
def makeRemoveAudioSource():
suite = unittest.TestSuite()
suite.AddTest(TestSomething("TestSomeClass"))
return suite
def suite():
return unittest.makeSuite(TestSomething)
if __name__ == '__main__':
unittest.main()
Run Code Online (Sandbox Code Playgroud)