在 python 中使用 unittest 和主包内目录中的测试模块的正确方法是啥?

Posted

技术标签:

【中文标题】在 python 中使用 unittest 和主包内目录中的测试模块的正确方法是啥?【英文标题】:What is the correct way to use unittest in python with the test modules in a directory inside the main package?在 python 中使用 unittest 和主包内目录中的测试模块的正确方法是什么? 【发布时间】:2020-06-25 23:44:33 【问题描述】:

我目前正在使用 3.7.1 开发一个 python 包,并尝试将 unittest 与包含测试模块的 /test 目录一起使用,然后该目录将包含多个测试用例。我正在尝试使用以下目录结构:

|_ app/
  |_ main.py
  |_ my_module/
             |_ MyPackage.py
  |_ test/
             |_ test_MyPackage.py

在 test_MyPackage.py 中,我尝试使用 from my_module.MyPackage import MyClass 从 MyPackage 导入所需的类,就好像模块放在 app/ 目录中一样,但这不起作用,因为导入失败。我知道python中的导入不是这样工作的,并在阅读Running unittest with typical test directory structure的相同问题后尝试了它,这似乎已经过时了。我还读到,如果测试用例位于 /test 目录并命名为 test_*.py,则使用 python -m unittest 应该可以工作,但这也不起作用,并输出“在 0.000 秒内运行 0 个测试”。

到目前为止,我能够使用我的单元测试的唯一方法是每次我想运行它们时将它们移动到 app/ 目录。有人可以建议我如何在这样的单独目录中使用单元测试,而无需将它们移动到 app/ 目录或在 app/ 目录中永久使用单独的测试模块导入它们吗?

【问题讨论】:

显示从测试目录运行测试时遇到的错误。 ModuleNotFoundError: No module named 'my_module',在运行测试时我是否缺少将 app/ 目录添加到路径的内容? 发布您在原始帖子中遇到的错误,以便其他人也可以阅读。 还在您的帖子中包含您在 test_MyPackage.py 文件中所做的导入以及您运行测试的方式。 【参考方案1】:

这正在工作,我在 test/ 目录中添加了一个__init__.py 文件,并且使用 python -m unittest 时测试全部运行成功。我认为在 Python 3.3 之后不需要此文件,但如果没有它,unittest 似乎无法正常工作

【讨论】:

以上是关于在 python 中使用 unittest 和主包内目录中的测试模块的正确方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

无法在python中使用unittest模拟类方法

用 Python 进行测试 - 如何在使用 unittest 的测试中使用 assertRaises? [复制]

使用unittest.mock在python中修补SMTP客户端

python中unittest的使用

Python 3 unittest不能在函数内部使用mock方法

使用 unittest.mock 在 python 中修补 SMTP 客户端