[英]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
)。 使用您当前的结构,我只需在src
和tests
文件夹中添加一个空的__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.