Python单元测试未从指定目录运行

问题描述 投票:1回答:1

如果我在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

python-3.x unit-testing filepath
1个回答
1
投票

我认为-t-sunittest discover选项分别对应于top_level_dirstart_dirunittest.TestLoader.discover参数。

通过从指定的起始目录递归到子目录中找到所有测试模块,并返回包含它们的TestSuite对象...

所有测试模块必须可从项目的顶层导入。如果起始目录不是顶级目录,那么必须单独指定顶级目录。

因此,这两个选项控制unittest.TestLoader.discover在测试时如何查找和导入模块。但是,它们似乎并没有影响程序在运行时搜索文件的方式。如果在加载unittest之前打印出os.listdir(),将会看到只有后一种情况才能使用相对路径找到它。

要解决该问题,您可以使用os.listdir()将该行修改为绝对路径:

validation_config.json

然后您以前的情况也应该起作用。

© www.soinside.com 2019 - 2024. All rights reserved.