在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
文件。