如果我不随包分发 pytest 测试,如何组织它们?

oro*_*ome 5 software-distribution pytest python-2.7

正如pytest 文档中所建议的,我设置了我的包,目的不是将我的测试与我的包一起分发:

\n\n
setup.py\nmypkg/\n    __init__.py\n    mypkg/\n      appmodule.py  \ntests/\n    test_app.py\n    ...\n
Run Code Online (Sandbox Code Playgroud)\n\n

但我对如何确保这些测试在存在时正确运行(例如在 Travis CI 上或在项目目录的克隆中)感到困惑。

\n\n

我希望测试脚本中的导入应用于相邻mypkg/目录中的源(而不是任何mypkg可能安装在 中的源site-packages),但我遇到了令我困惑的错误。

\n\n

如果我遵循文档中的建议pytest并且不__init__.py添加tests/then

\n\n
from __future__ import absolute_import\nfrom mypkg.appmodule import * \n
Run Code Online (Sandbox Code Playgroud)\n\n

我明白了

\n\n
\n

导入错误:没有名为 mypkg.appmodule 的模块

\n
\n\n

当与

\n\n
from __future__ import absolute_import\nfrom ..mypkg.appmodule import * \n
Run Code Online (Sandbox Code Playgroud)\n\n

我明白了

\n\n
\n

ValueError:尝试在非包中进行相对导入

\n
\n\n

如果我忽略文档并包含一个__init__.py,那么对于后者我会得到

\n\n
\n

ValueError:尝试超出顶级包的相对导入

\n
\n\n

仅通过包含__init__.py并使用

\n\n
from __future__ import absolute_import\nfrom mypkg.appmodule import * \n
Run Code Online (Sandbox Code Playgroud)\n\n

我的测试会运行吗?但我不清楚mypkg/如果 amypkg安装在site-packages.

\n\n

组织我的测试的正确方法是什么pytest,以便它们与 \xe2\x80\x94\xc2\xa0 分开,并且不与 \xe2\x80\x94\xc2\xa0my 项目源一起分发,但始终导入相邻源,而不是elswehere 安装的软件包的版本?

\n

Ada*_*dam 2

问题是当你要求 python 在 mypkg 目录中查找它不存在的目录时,它无法找到你的 appmodule。

您已使用以下命令正确设置目录:

setup.py
mypkg/
    __init__.py
    mypkg/
        appmodule.py  
tests/
    test_app.py
    ...
Run Code Online (Sandbox Code Playgroud)

但由于您已经创建了另一个 mypkg/ 子目录来存放 appmodule.py,因此您需要将 __init__.py 放在该子目录中才能进行导入。该调用也将更改为:

from mypkg.mypkg.appmodule import *
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助。