聊聊 Python 的单元测试框架(二):nose 和它的继任者 nose2 (2)

它们有很多相同点,比如都兼容 unittest,支持使用函数作为测试用例,支持子测试,拥有插件体系。但也有很多不同点,下面列出一些主要的不同点:

发现和载入测试

nose 自行实现了模块加载功能,使用惰性方式加载测试模块,加载一个执行一个。

nose2 则借助内建的 导入模块,并且是先全部载入,再执行用例

nose2 并不支持 nose 所支持的所有测试用例项目结构,比如如下用例文件的结构在 nose2 中就不受支持:

. `-- tests |-- more_tests | `-- test.py `-- test.py

测试前置和清理函数级别

nose 支持方法、类、模块和包级别的测试前置和清理函数

nose2 则不支持包级别的测试前置和清理函数

子测试

nose2 除了支持使用测试生成器来实现子测试外,还支持使用来实现子测试

nose2 除了像 nose 一样支持在测试函数和测试类(不继承于 unittest.TestCase)中支持参数化测试和测试生成器外,还支持在继承于 unittest.TestCase 的测试类中使用

配置化

nose 期望所有插件的配置通过命令行参数进行配置

nose2 则通过配置文件进行控制,以最小化命令行参数让人读得更舒服

更多对比详见 官方文档。

三、小结

nose 和 nose2 在做到兼容 unittest 上就足以看出它们的目标,那便是要吸引原来那些使用 unittest 的用户来使用它们。它们确实做到了!

nose 和 nose2 在用例编写、测试夹具、子测试上做出改进,已经能让日常用例编写工作变得更加容易和灵活。同时又引入插件体系,进一步将单元测试框架的能力提升了一个大大的台阶,这让很多在基础测试功能之上的高阶功能的实现和共享成为了可能。也难怪有众多开发者对它们情有独钟。

『讲解开源项目系列』——让对开源项目感兴趣的人不再畏惧、让开源项目的发起者不再孤单。跟着我们的文章,你会发现编程的乐趣、使用和发现参与开源项目如此简单。欢迎留言联系我们、加入我们,让更多人爱上开源、贡献开源~

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpjxpz.html