单元测试蟒蛇;进口中断



我有一个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

最新更新