我有一个python应用程序,我正在尝试对其进行单元测试。 代码位于 src 目录中,测试位于测试目录中。
尝试测试包含我的 main 方法的类时出现问题。此类位于 src 目录中,并引用了其他模块中的类,这些模块都位于 src 目录中。为了执行我的应用程序,我有这种格式的引用from <module> import <class>
当我来测试这个主类时,我写了一个测试类并将其放在测试目录中。运行测试时,我发现主类中的导入有问题。要解决,我必须将导入更改为来自from src.<module> import <class>
完成此操作后,我的测试现在通过了,但应用程序本身失败了。
如何解决此问题,以便我的导入对单元测试和正常执行都有效?
由于import
的工作方式,它可能会失败。
我建议始终使用绝对导入。这意味着,在创建包时,该包中的所有导入都从顶层一直向下导入:from package.module import thing
。更重要的是,安装你的包 - 不是作为一个普通的Python包,而是带有符号链接,允许你编辑你的源代码,而它仍然被认为是一个已安装的包。通过这种方式,您可以根据需要定位测试和脚本,并且事情将始终有效。
安装软件包是通过 root
中的pip install -e .
完成的。如果您不熟悉打包示例,请参阅打包教程。
示例包结构可能是:
root/
setup.py
MANIFEST.in
...
package/
__init__.py
app.py
tests.py
module/
__init__.py
component.py
module_test.py
# Or have a tests folder under root
tests/
test_module.py
tests.py
例如在app.py
,以及任何地方:
from package.module.component import Class
from package.module import thing # that was declared in module/__init__.py
所以对于你的情况,如果我理解正确,你会有:
root/
setup.py
MANIFEST.in
...
src/
__init__.py
app.py
module.py
tests/
test_module.py
tests.py