[英]Does pytest support the use of function factories in test files?
[英]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.