繁体   English   中英

如何使用 Python 从不同目录运行 unitest

[英]How to run unitest from different directories with Python

我的项目中有以下结构;

project
    src
    ├── A.py
    └── B.py
    tests
    ├── test_b.py

在 B.py 中,我像这样导入 A.py;

from A import foo

当我运行它时,B.py 工作正常。 但是,在 test_b.py 中测试 B.py 时,我收到一条错误消息

No module named A

我可以使用 B.py 中的相对导入进行测试,但是当我自己运行模块时会失败。

包外的相对导入是噩梦的根源。 当您在源目录中开发和测试时,一切都很好。 一旦您想使用其他目录中的代码,问题就会开始出现。

解决方法:在本地导入之前始终在sys.path中添加__file__的目录。 由于sys.path是一个可写列表,它会起作用。 如果目录已经存在,您至少应该尝试不添加该目录...

惯用方式:如果您需要本地进口,那么您可能需要 package。 它可能需要一些工作,因为预计会安装包,但如果您打算稍后部署代码,这是一个很大的 +。 不利的一面是,package 必须作为模块启动( python -m xy )而不是纯脚本( python x/y.py )。 使用您当前的结构,我只需在srctests文件夹中添加一个空的__init__.py文件,如果您想直接启动 package,则在 src 中添加一个__main__.py文件。

然后你应该运行项目中的所有内容(包括测试和开发运行): python -m src.B [params...] 测试python -m tests.test_b 或者直接(因为测试文件夹和文件以 test 开头): python -m unittest discover

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM