它们有很多相同点,比如都兼容 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 在用例编写、测试夹具、子测试上做出改进,已经能让日常用例编写工作变得更加容易和灵活。同时又引入插件体系,进一步将单元测试框架的能力提升了一个大大的台阶,这让很多在基础测试功能之上的高阶功能的实现和共享成为了可能。也难怪有众多开发者对它们情有独钟。
『讲解开源项目系列』——让对开源项目感兴趣的人不再畏惧、让开源项目的发起者不再孤单。跟着我们的文章,你会发现编程的乐趣、使用和发现参与开源项目如此简单。欢迎留言联系我们、加入我们,让更多人爱上开源、贡献开源~