调试和测试Python包的工作流程

15 浏览
0 Comments

调试和测试Python包的工作流程

在Python包中,调试和测试的通常接受的工作流程是什么?\n目前,我有一个与项目src文件夹位于同一级别的test文件夹。我希望测试文件(单元测试和其他测试)能够调用同级文件夹中最新开发的Python代码中的代码。然而,为了做到这一点,我需要做一些事情,比如将文件夹添加到路径中并使用相对导入来使其正常工作。但是这似乎会破坏其他项目开发人员的工作。\n另一种选择是使用pip install在本地安装代码。但是这样每次想要进行测试时都需要麻烦地进行安装。\n请问有人可以推荐一个安全高效的项目内测试工作流程吗?如果更喜欢第一种方式,我应该如何处理导入和路径,以可靠地使测试代码调用本地项目代码,并对所有人都起作用?

0
0 Comments

问题的出现原因:无法在测试文件中导入源代码文件。

解决方法:在测试文件夹中添加一个__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文件。

0
0 Comments

问题的出现原因是在调试和测试一个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是正确的。

0