调试和测试Python包的工作流程
调试和测试Python包的工作流程
在Python包中,调试和测试的通常接受的工作流程是什么?\n目前,我有一个与项目src文件夹位于同一级别的test文件夹。我希望测试文件(单元测试和其他测试)能够调用同级文件夹中最新开发的Python代码中的代码。然而,为了做到这一点,我需要做一些事情,比如将文件夹添加到路径中并使用相对导入来使其正常工作。但是这似乎会破坏其他项目开发人员的工作。\n另一种选择是使用pip install在本地安装代码。但是这样每次想要进行测试时都需要麻烦地进行安装。\n请问有人可以推荐一个安全高效的项目内测试工作流程吗?如果更喜欢第一种方式,我应该如何处理导入和路径,以可靠地使测试代码调用本地项目代码,并对所有人都起作用?
问题的出现原因:无法在测试文件中导入源代码文件。
解决方法:在测试文件夹中添加一个__init__.py
文件,将测试文件夹作为一个包来处理。然后在测试文件中使用import
语句导入源代码文件。
具体实现方法如下:
import sys import os.path sys.path.append(os.path.join(os.path.dirname(os.path.dirname(__file__)), 'src'))
假设源代码文件夹中包含一个a.py
文件,可以在测试文件test_a.py
中使用import a
来导入该源代码文件。
假设使用unittest来运行测试,假设当前工作目录包含测试文件夹,可以使用以下命令来运行测试文件:
python -m unittest test.test_a
如果遵循上述方法,可以使用以下命令运行所有测试文件:
python -m unittest discover
因为discover
命令会自动查找test
包及其下的所有test*.py
文件。
问题的出现原因是在调试和测试一个Python包时,需要将文件夹添加到路径中并使用相对导入来使其正常工作。然而,这样做似乎会破坏其他项目开发者的工作。
解决方法是按照以下布局设置项目文件夹:
project |--src # 存放所有代码的目录 |--test # 存放测试的目录 ...
然后,在每个测试的.py
文件中,在从src
导入之前添加以下代码行:
import sys sys.path.append("./src")
最后,从项目目录执行测试。
编辑:
当使用pytest
时,可以将路径追加语句放到conftest.py
文件中。这样,就不必在每个测试.py
文件中添加它了。
感谢。如何从项目中导入类和其他内容?
如果你有一个文件src/controller.py
,你可以在sys.path
语句之后使用from controller import *
进行导入。
难道不应该是sys.path.append("..//src")
吗?
由于我说过“最后,我从project
目录执行测试”,所以工作目录是project
,因此./src
是正确的。