nal*_*zok 9 python unit-testing module python-import python-unittest
根据unittest.TestLoader.discover的文档:
discover(start_dir, pattern=’test*.py’, top_level_dir=None)...所有测试模块必须可以从项目的顶层导入。如果起始目录不是顶级目录,则必须单独指定顶级目录...
我自己做了一些实验,似乎 whentop_level_dir是不同的start_dir并且没有设置,没有出错:所有测试都被发现并正确导入。
我想知道将top_level_dir参数传递给discover. 为什么它需要知道顶级目录是什么?我想它的所有工作都是 (i) 在 中找到测试包/模块start_dir,以及 (ii) 导入它们,不是吗?
或者,有人可以提供一个示例,说明没有top_level_dir导致测试发现至少部分失败吗?
小智 0
unittest.TestLoader.discover() 中的 top_level_dir 参数用于指定被测试项目的根目录。这用于确定正在测试的模块的包结构,并允许 discovery() 方法正确导入和运行测试。
当未指定top_level_dir时,discover()方法将使用当前工作目录作为项目的根目录。如果当前工作目录不是项目的根目录,这可能会出现问题,因为它可能导致方法错误导入或找不到某些测试。
例如,考虑具有以下目录结构的项目:
myproject/
mypackage/
__init__.py
tests/
__init__.py
test_module.py
Run Code Online (Sandbox Code Playgroud)
如果从 myproject 目录运行unittest.TestLoader.discover(),并且不指定 top_level_dir 参数,该方法将在当前工作目录中搜索测试,但不会找到任何测试,因为它们位于 mypackage 中/测试/子目录。
但是,如果您指定 top_level_dir='myproject' 参数,discover() 方法将正确查找并导入 mypackage/tests/ 目录中的测试。
总之,top_level_dir参数用于指定正在测试的项目的根目录,即使当前工作目录不是项目的根目录,它也有助于正确查找和导入测试。
| 归档时间: |
|
| 查看次数: |
318 次 |
| 最近记录: |