如果我在app
中运行此命令,则会收到此错误消息,即没有这样的文件或目录:
python3 -m unittest discover -t ~/app/dataloader/ -s ~/app/dataloader/tests
导致此错误:
with open("assertions/validator/validation_config.json") as inp:
FileNotFoundError: [Errno 2] No such file or directory: 'assertions/validator/validation_config.json'
但是,如果我进入dataloader
并运行它:
python3 -m unittest discover -t . -s tests
一切都过去了。
这很奇怪吗?
应用程序文件夹结构为app -> dataloader -> assertions -> validator -> validation_config.json
我认为-t
的-s
和unittest discover
选项分别对应于top_level_dir
的start_dir
和unittest.TestLoader.discover
参数。
通过从指定的起始目录递归到子目录中找到所有测试模块,并返回包含它们的TestSuite对象...
所有测试模块必须可从项目的顶层导入。如果起始目录不是顶级目录,那么必须单独指定顶级目录。
因此,这两个选项控制unittest.TestLoader.discover
在测试时如何查找和导入模块。但是,它们似乎并没有影响程序在运行时搜索文件的方式。如果在加载unittest
之前打印出os.listdir()
,将会看到只有后一种情况才能使用相对路径找到它。
要解决该问题,您可以使用os.listdir()
将该行修改为绝对路径:
validation_config.json
然后您以前的情况也应该起作用。