Python单元测试应该在一个单独的模块中吗?

Jon*_*lls 17 python testing unit-testing

关于放置Python单元测试的最佳位置是否存在共识?

单元测试是否应与被测试的功能包含在同一模块中(当模块单独运行时执行(if __name__ == '__main__'等等)),或者将单元测试包含在不同模块中更好?

也许这两种方法的组合是最好的,包括每个模块中的模块级测试,并添加更高级别的测试,测试多个模块中包含的功能作为单独的模块(可能在/ test子目录中?).

我假设如果测试包含在单独的模块中,测试发现会更直接,但如果他/她必须记住在修改测试模块时更新附加测试模块,则会给开发人员带来额外的负担.

我有兴趣了解人们对组织单元测试的最佳方式的看法.

Nic*_*zet 12

是的,请使用单独的模块.

使用这个__main__技巧并没有多大意义.假设您的模块中有多个文件,并且它不再起作用,因为您不希望在测试模块时单独运行每个源文件.

此外,在安装模块时,大多数时候您不想安装测试.您的最终用户不关心测试,只有开发人员应该关心.

不完全是.把你的测试放入tests/,你的doc doc,并准备一个Makefile make test.任何其他方法都只是中间解决方案,仅对特定的小模块有效.


jds*_*jds 11

  1. 如果使用库指定单元测试应该存在的位置,则必须使用
  2. 在模块本身中用于小型项目,或
  3. tests/包的子目录中,用于较大的项目.

这是对您正在创建的项目最有效的问题.

有时候,你正在使用的库确定在测试应该去,因为是和Django(其中你把你的测试的情况下models.py,tests.py或者tests/在您的应用程序子目录).

如果没有现有约束,那就是个人偏好问题.对于一小组模块,将单元测试放在您正在创建的文件中可能更方便.

对于任何超过几个模块的东西,我tests/在包中的目录中单独创建测试.将测试代码与实现混合在一起会给读取代码的人增加不必要的噪音.


Mik*_*cki 10

就个人而言,我在我的源目录中创建了一个tests /文件夹,并尝试或多或少地使用单元测试等价物镜像我的主要源代码层次结构(根据经验,有1个模块= 1个单元测试模块).

请注意,我使用的是鼻子,它的理念与unittest有点不同.