python test文件_关于python:pytest如何找到要测试的文件?

我知道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回复

ImportError while importing test module tests/test_arith.py'

我从项目根目录运行pytest,为什么它不像我的导入一样?它想在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文件夹:)

It's a little strange so much is needed. Surely there is a better way?

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

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

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

真好 有趣的是,我试图分发的是一个文件,客户只需说import thething就可以使用。 香港专业教育学院建立了大型的多文件应用程序,其中pytest是其中的一部分,是的,tests目录是main,models,views,当然还有env的同级文件。 以这种方式打包时,客户会说from models import whatever或import models。 要获得我想要的东西,我想我不仅需要拥有thething.py,还必须使thething成为tests的同级并将所有代码放入thething__init__.py。 它只有几百行...

如果您想提供一些您希望人们导入的东西,那么您肯定要创建一个包-即使它只是一个文件。 您仍然可以使用setup.py进行操作。 如果采用这种方法,则可以在同一文件夹中包含thething.py和tests。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值