Python main()来运行包中的所有测试模块

Python main()来运行包中的所有测试模块,python,python-unittest,Python,Python Unittest,我在\tests中保存了几个测试模块。然后在运行主程序之前,通过指定 from tests.ClassTests1 import * from tests.ClassTests2 import * ... unittest.main() 是否有任何方法可以指示unittest.main()运行\tests中的所有文件,而不必像上面那样无休止地重复导入它们?例如,我从测试导入中尝试了*,但它不起作用 编辑:我关注的是编程发现,而不是通过命令行进行的发现 非常感谢 来自第25.3.3节。测试发现

我在\tests中保存了几个测试模块。然后在运行主程序之前,通过指定

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

unittest.main()
是否有任何方法可以指示unittest.main()运行\tests中的所有文件,而不必像上面那样无休止地重复导入它们?例如,我从测试导入中尝试了
*
,但它不起作用

编辑:我关注的是编程发现,而不是通过命令行进行的发现

非常感谢

来自第25.3.3节。测试发现:

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

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

cd项目目录

python-m单元测试发现


感谢约翰·戈登的链接。以下是它对我起作用的原因:

from tests.ClassTests1 import *

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

但是,我仍然需要导入至少一个测试模块,而且我不确定我是否正确,因为它发现了
测试的整个测试层次结构

,我现在更新了这个问题,让它更清楚一点:我是在编程发现之后,而不是通过命令行发现。python模块中TestLoader.discover()的语法是什么。谢谢
TestLoader.discover()
返回一个
TestSuite
对象,其中包含已发现的所有测试。执行返回的TestSuite对象的
.run()
方法来运行这些测试。(这在我的回答中的链接中都解释得很好。你仔细阅读了吗?)谢谢!这是一个巨大的阅读量,我是python新手。所以我设法让它发现了测试,但是,我不知道如何处理导入。现在要运行它,我需要明确指定至少一个测试模块作为导入,例如tests.ClassTests1 import*。这是违反直觉的,因为我实际上发现了整个测试套件。但是如果没有这个导入,它就无法编译。我做错了什么?谢谢你的帮助!无需导入测试模块,一个简单的
import unittest
对我来说很有效。Captain Obscape已经看到了这个答案,并建议您也可以导入
sys
并添加
sys.exit(而不是result.wassuctive())
,作为传播失败的最后一行