Python 在包内添加单元测试

Python adding unit test inside package

我有一个 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