调试和测试Python包工作流



在python包中,调试和测试通常接受的工作流程是什么?

目前我有一个测试文件夹,位于项目src文件夹的同一级别。我希望测试文件(单元测试和其他)在同一级别文件夹中调用项目中最新开发的Python代码。然而,为此,我需要做一些事情,例如在路径中添加文件夹和相对导入,以使其工作。但这似乎打破了其他项目开发人员。

另一种方法是使用pip install在本地安装代码。但是每次我想测试的时候,这样做都很麻烦。

有人可以推荐一个工作流程,是安全和有效的测试在一个项目。如果首选第一种方法,那么对于导入和路径,我应该怎么做才能让测试代码以一种可靠的方式调用本地项目代码,并且对每个人都有效?

然而,为此我需要做一些事情,例如将文件夹添加到路径和相对导入以使其工作。但这似乎打破了其他项目开发人员。

执行以下操作不会破坏项目。

对我来说,下面的布局是可行的(参见这里):

project
|--src    # directory for all of your code
|--test   # directory for tests
...

然后在每个测试.py文件中有以下代码行(在从src导入之前):

import sys
sys.path.append("./src")

最后,我从项目目录执行测试。


编辑

当使用pytest时,您实际上可以将path-追加语句移动到conftest.py文件中。这样,您就不必将它添加到每个测试.py文件中。

一个可能的技巧是通过在其中添加一个__init__.py文件来使测试文件夹成为一个包:

import sys
import os.path
sys.path.append(os.path.join(os.path.dirname(os.path.dirname(__file__)), 'src')

然后假设src文件夹包含一个a.py文件,您可以像import a提供的一样简单地将它从test导入到test_a.py文件中。您从包含test的文件夹开始测试,如下(假设为unittest):

python -m unittest test.test_a

如果您遵循该模式,好消息是您可以使用

运行完整的测试列表
python -m unittest discover

因为discover的魔力会找到test包和它下面的所有test*.py文件。

最新更新