Python在包内添加单元测试

标签 python python-3.x unit-testing python-import python-unittest

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

相关文章:

python - django.db.utils.IntegrityError : duplicate key value violates unique constraint "auth_permission_pkey" 错误

Python - 如果另一列具有列表中的值,则 Pandas 会替换列中的值

python - 如何删除嵌套列表中的重复项?

ruby - 单元测试和 SAP 软件

javascript - sinon模拟不接听电话

python - 修补定义函数的文件中的函数

python - 从文本文件中检索一个变量时比较 2 个变量

python - 为什么使用 "colon and comma"进行切片与使用索引集合进行切片不同

python - 从图像中提取文本。文字识别

python - __slots__ 在 Python 中是如何实现的?