繁体   English   中英

pytest如何找到要测试的文件?

[英]How does pytest find files to test?

我知道py.test如何发现要运行的测试,但是我不知道如何使测试引用包含要测试的代码的文件。

我的项目如下所示:

arith.py
tests/
    test_airth.py

在我的项目根目录中,我有arith.py文件,其中

def plus(x, y):
    return x + y

在文件tests/test_arith.py我有

import arith
def test_plus():
    assert arith.plus(3, 5) == 8

当我运行时,在项目根目录中,

pytest

它会发现我的测试文件,因为我遵循了测试发现规则。 但是pytest回复

导入测试模块tests / test_arith.py时的ImportError

我从项目根目录运行pytest ,为什么它不像我的导入一样? 它想在tests目录中找到我正在测试的文件!

如何正确设置导入,以便我在tests/目录中的tests/文件可以看到项目根目录中的被测试文件? (pytest文档中的示例似乎并没有做任何特别的事情……也许测试与被测文件位于同一目录中?它们详细描述了测试发现,但我一定错过了如何设置测试的方法,因此它们可以看到他们正在测试的代码。)

假设您有这样的布局(这就是我要做的):

.
├── myprogram
│   ├── __init__.py
│   ├── core.py
│   └── db.py
├── setup.py
└── tests
    ├── test_core.py
    └── test_db.py

您应该像这样调用pytest:

py.test tests

我相当确定这是测试目录的绝对/相对路径。 这还假设您已完成python -m pip install -e . 在您的根目录中。 而且您也有一个.git.hg文件夹:)

这有点奇怪,所以需要很多。 当然有更好的方法吗?

其实那最好的方法。 我认为宣布Python应用程序的最佳分发方式是Python软件包(最好是wheel)并没有争议。 为此,您可能需要setup.py

通过安装你的包(最好在VENV / virtualenv中沙箱)你确保你知道软件包安装/运行需要什么。 如果安装了软件包,则意味着任何import myprogram脚本(使用我的示例布局)都将能够导入您的软件包。 这就是您在测试套件中要做的事情。

然后,您的测试发现就像告诉pytest在哪里找到一样简单。

暂无
暂无

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

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