2017-08-14 116 views
0

我有几个保存在\ tests中的测试模块。我然后在主类加载它们通过指定unittest.main()运行包中的所有测试模块

from tests.ClassTests1 import * 
from tests.ClassTests2 import * 
... 

unittest.main() 

运行主程序之前,有没有什么办法,以指导unittest.main()来运行\测试中的所有文件,而无需通过导入它们的无休止的重复去如上?例如。我试过from tests import *,它不起作用。

编辑:我在程序化发现后没有通过命令行发现。

非常感谢!

回答

0

由于去约翰·戈登为他的链接。这里是什么使得这对我的工作:

from tests.ClassTests1 import * 

# Run test cases first 
suite = unittest.TestLoader().discover('tests', pattern='ClassTests*.py') 
result = unittest.TextTestRunner(verbosity=2).run(suite) 

不过,我仍然需要进口至少一个测试模块,我不知道如果我这样做的权利,因为它发现的tests整个测试层次。

0

https://docs.python.org/2/library/unittest.html,第25.3.3节。测试发现:

Unittest支持简单的测试发现。为了与测试发现兼容,所有测试文件都必须是可从项目的顶级目录导入的模块或包(这意味着它们的文件名必须是有效的标识符)。

测试发现在TestLoader.discover()中实现,但也可以从命令行使用。基本的命令行用法是:

cd project_directory

python -m unittest discover

+0

我已经更新了现在的问题,使其更清晰一点:我是在程序化发现之后而不是通过命令行发现的。 Python模块内TestLoader.discover()的语法是什么。谢谢! – afora377

+0

'TestLoader.discover()'返回包含所有已发现测试的TestSuite对象。执行返回的TestSuite对象的'.run()'方法来运行这些测试。 (在我回答中发布的链接中,这一切都得到了相当好的解释,你有没有仔细阅读?) –

+0

谢谢!这是一个大规模的阅读,我是python的新手。所以我设法让它发现了测试,但是,我无法弄清楚如何处理进口。现在要运行它,我需要明确指定至少一个测试模块作为导入,例如, '从tests.ClassTests1导入*'。这是与我直觉相反的,因为我实际上在发现整个测试套件。但没有这个导入它不会编译。我究竟做错了什么?感谢您的帮助! – afora377

相关问题