我有一个 python 包,我正在尝试为其编写单元测试 包如下所示
helper/
utils/
app/
requirements.txt
README.md
tests/
我来自java背景,所以我想将测试组织在与其源相同的包中,因此我的测试目录如下所示
tests/
helper/
helper_a_test.py
utils/
util_a_test.py
app/
myapp_test.py
当我尝试调用如下测试时
python -m unittest discover
由于从源导入错误,且未找到错误模块应用程序、帮助程序、实用程序,测试失败。 我的所有包都有 __init__.py 文件。 我将测试子目录中的所有测试移动到测试根目录中,如下所示。
tests/
helper_a_test.py
util_a_test.py
myapp_test.py
现在所有测试都按预期进行。 有人可以解释为什么会发生这种情况吗?将所有测试保存在一个目录中而不是单独的包中也是一种好的做法吗?
最佳答案
您至少有两种方法可以返回到原始结构并使其正常工作:
第一个也是最直接的一个是在您的测试结构中添加一个
__init__.py
(在所有级别,还有您可能错过的测试文件夹)。第二个是将您的代码转换为 python 包(添加
setup.py
,以便您的应用程序可以通过 pip 安装),在本地解释器中安装您的包然后运行测试。
我还建议使用 pytest 并直接调用 pytest
而不是 python -m unittest
。
关于Python在包内添加单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62026129/