[英]How to use unittest.TestSuite in VS Code?
将来,我将需要添加许多具有不同参数的相同测试。 现在,我正在制作一个示例测试套件:
import unittest
class TestCase(unittest.TestCase):
def __init__(self, methodName='runTest', param=None):
super(TestCase, self).__init__(methodName)
self.param = param
def test_something(self):
print '\n>>>>>> test_something: param =', self.param
self.assertEqual(1, 1)
if __name__ == "__main__":
suite = unittest.TestSuite()
testloader = unittest.TestLoader()
testnames = testloader.getTestCaseNames(TestCase)
for name in testnames:
suite.addTest(TestCase(name, param=42))
unittest.TextTestRunner(verbosity=2).run(suite)
VS Code发现了它:
start
test.test_navigator.TestCase.test_something
运行测试时,我没有收到参数:
test_something (test.test_navigator.TestCase) ...
>>>>>> test_something: param = None
ok
----------------------------------------------------------------------
Ran 1 test in 0.001s
OK
如果我直接运行此文件,那么一切都会按预期进行(请注意param = 42
part)
test_something (__main__.TestCase) ...
>>>>>> test_something: param = 42
ok
----------------------------------------------------------------------
Ran 1 test in 0.001s
OK
如此看来,VS Code只是通过使用发现的类并完全忽略TestSuite独自运行测试?
我究竟做错了什么?
谢谢。
问题是您的代码位于if __name__ == "__main__"
块中,仅当您将Python直接指向文件时才执行。 因此,当扩展程序要求unittest
获取所有测试然后为我们运行它们时,它不会在if __name__ == "__main__"
块中运行代码(这就是为什么它可以找到它但是却没有任何神奇的作用的原因) )。
如果您可以使用unittest
的命令行界面使其正常工作,则该扩展程序应按您希望的方式运行它。
关键是实现load_tests
函数:
def load_tests(loader, tests, pattern):
suite = unittest.TestSuite()
testnames = loader.getTestCaseNames(TestCase)
for name in testnames:
suite.addTest(TestCase(name, param=42))
suite.addTest(TestCase(name, param=84))
return suite
该文件说:
如果load_tests存在,则发现不会递归到软件包中,load_tests负责加载软件包中的所有测试。
现在我的测试按预期运行。
PS感谢Brett Cannon向我指出了单元测试框架文档
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.