二、nose2
它们有很多相同点,比如都兼容 unittest,支持使用函数作为测试用例,支持子测试,拥有插件体系。但也有很多不同点,下面列出一些主要的不同点:
发现和载入测试
nose 自行实现了模块加载功能,使用惰性方式加载测试模块,加载一个执行一个。
nose2 则借助内建的 import() 导入模块,并且是先全部载入,再执行用例
nose2 并不支持 nose 所支持的所有测试用例项目结构,比如如下用例文件的结构在 nose2 中就不受支持:
. `-- tests |-- more_tests | `-- test.py `-- test.py |
测试前置和清理函数级别
nose 支持方法、类、模块和包级别的测试前置和清理函数
nose2 则不支持包级别的测试前置和清理函数
子测试
nose2 除了支持使用测试生成器来实现子测试外,还支持使用参数化测试(Parameterized tests)来实现子测试
nose2 除了像 nose 一样支持在测试函数和测试类(不继承于 unittest.TestCase)中支持参数化测试和测试生成器外,还支持在继承于 unittest.TestCase 的测试类中使用
配置化
nose 期望所有插件的配置通过命令行参数进行配置
nose2 则通过配置文件进行控制,以最小化命令行参数让人读得更舒服
三、小结
nose 和 nose2 在做到兼容 unittest 上就足以看出它们的目标,那便是要吸引原来那些使用 unittest 的用户来使用它们。它们确实做到了!
nose 和 nose2 在用例编写、测试夹具、子测试上做出改进,已经能让日常用例编写工作变得更加容易和灵活。同时又引入插件体系,进一步将单元测试框架的能力提升了一个大大的台阶,这让很多在基础测试功能之上的高阶功能的实现和共享成为了可能。也难怪有众多开发者对它们情有独钟。
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理