您必须确保始终遵循一些命名约定(您似乎正在这样做):所有测试都使用相同的前缀命名(test_是规范),后跟要测试的模块的名称。
prog.py=>;test_prog.py
测试位于test/目录中。
然后你可以这样做:
进度计划import sys
...
... do module stuff here...
...
if __name__ == "__main__":
# Check if we want to run the tests for this file
if "--unittest" in sys.argv:
import unittest
test_filename = 'test_' + __file__
test_directory = 'test'
suite = unittest.TestLoader().discover(test_directory, pattern=test_filename)
unittest.TextTestRunner(verbosity=2).run(suite)
我们正在做的是:检查命令参数以查看是否存在--unittest(因为这是您唯一希望运行测试的时间)。
如果是,那么我们按照我们设置的命名约定创建test_prog.py。
然后我们把它传递给TestLoader().discover函数。
discover(...)从指定的目录开始,查找与提供的模式匹配的所有测试模块(递归到子目录中)。
在我们的例子中,它将在test/目录中查找名为test_prog.py的任何模块。当它运行时,它会加载它并创建一个包含我们要运行的测试用例的测试套件。
最后,我们手动测试unittest以运行上一步中获得的suite。
通常,unittest将在后台为我们完成所有这些工作,但是由于我们正试图运行一个特定的测试模块,我们必须确切地知道如何以及从何处获取它。
另外,请注意,您必须在要执行此操作的每个文件中执行此操作。