差异:nose2与nose与unittest2
nose2 不是 nose
有什么不同
Python版本
nose支持python 2.4及更高版本,但nose2仅支持当前由python团队支持的python版本。
测试发现和加载
nose 加载测试模块延迟:第一个加载模块中的测试在第二个模块导入之前执行。 nose2首先加载所有测试,然后开始测试执行 . 这有一些重要的含义。
首先,这意味着nose2不需要海关进口商。nose2导入测试模块 __import__()
.
第二,这意味着 nose2不支持nose所做的所有测试项目布局。 . 具体来说,看起来像这样的项目将无法用nose2正确加载测试:
.
`-- tests
|-- more_tests
| `-- test.py
`-- test.py
对于nose的加载程序,这两个测试模块看起来像不同的模块。但是对于Nose2的加载器来说,它们看起来是一样的,无法正确加载。
测试夹具
Nose2仅支持 与UnitTest2相同级别的夹具 . 这意味着支持类级设备和模块级设备,但是 package-level fixtures are not . 此外,与nose不同,nose2不会试图命令命令行上命名的测试将具有相同设备的测试分组在一起。
参数化测试和发电机测试
鼻梁2支承座 比机头测试更多的参数化和生成器测试 ,并支持测试函数、测试类和单元测试TestCase子类中的所有测试生成器。Nose仅在没有子类unittest.TestCase的测试函数和测试类中支持它们。请参见: 加载程序:测试生成器 和 加载程序:参数化测试 想要更多。
配置
Nose期望插件将其所有配置参数作为命令行选项提供。 nose2预计几乎所有配置都将通过配置文件完成 。插件通常应该只有一个命令行选项:激活插件的选项。其他配置参数应从配置文件加载。这允许更多可重复的测试运行,并使命令行选项集足够小,便于人类阅读。请参见: 配置nose2 想要更多。
插件加载
Nose使用setuptools入口点查找和加载插件。nose2没有。相反, nose2要求在配置文件中列出所有插件 。这确保了插件不会仅仅因为安装在某个地方而加载到测试系统中,并且可以更容易地包含作为被测试项目一部分的插件。请参见: 配置nose2 想要更多。
有限的支持 python setup.py test
nose2支持设置工具' python setup.py test
命令,但通过与nose 截然不同的方式。为了避免由于无法使用自定义测试运行程序配置SETUPTOOLS测试命令而导致的内部复杂性,当以这种方式运行时, nose2基本上劫持了测试运行过程 . “测试套件”是指 nose2.collector.collector()
实际返回 is 隐藏在测试用例内部的测试运行程序。它正常加载和运行测试,设置自己的测试运行程序和测试结果,并调用 sys.exit()
它本身——完全绕过测试运行程序和SETUPTOOLS/UnitTest创建的测试结果。这可能与某些项目不兼容。
插件API
nose2基于Michael Foord在unittest2中所做的工作实现了一个新的插件API plugins
布兰奇。该API比Nose中的API优越得多,特别是在如何允许插件之间交互方面。但是它与nose2中的API有很大的不同,在nose2中支持nose2是不实用的: 必须重写插件才能使用nose2 。请参见: 正在写入插件 想要更多。
缺少插件
nose2 does not include some of the more commonly-used plugins in nose . 由于内部的差异,一些nose的内置插件无法移植到nose2。见: nose2插件 有关内置到nose2的插件的信息。
内构件
nose 在UnitTest中包裹或替换所有东西。nose2做得稍微少一点: 它不包装测试用例 ,并且不使用结果代理包装测试结果类。nose2是子类 TestProgram
并安装自己的加载程序、运行程序和结果类。它无条件地这样做,而不是允许参数 TestProgram.__init__()
指定测试加载器和运行程序。见 内构件 更多信息。
许可
当nose是LGPL时,nose2是BSD许可证。这一变化是应大多数 nose 贡献者的要求而作出的。
什么是一样的
哲学
nose2和nose有相同的目标:扩展unittest以使测试更好、更容易理解。它旨在为开发人员提供灵活性、强大性和透明性,这样通用的测试场景就不需要额外的工作,而不常见的测试场景可以用最少的麻烦和魔力来支持。
nose2不是(确切地说)unittest2/插件
nose2基于unittest2 plugins
分支,但在几个实质性方面与之不同。这个 事件API不完全相同 因为nose2不能替换unittest.testcase,并且 不全局配置测试运行或插件集 . Nose2也有一个 完全不同的报告API 从UnitTest2的插件中,可以更好地支持一些常见的情况(比如在错误输出中添加额外的信息)。nose 2 也 延迟插件的更多工作 比UnitTest2更重要的是:测试加载程序、运行程序和结果只是插件调用程序,所有的测试发现、运行和报告逻辑都是在插件中实现的。这意味着与UnitTest2不同, nose2包含大量默认为活动的插件。 .