差异: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不会试图命令命令行上命名的测试将具有相同设备的测试分组在一起。

参数化测试和发电机测试

nose2 supports more kinds of parameterized and generator tests than nose, and supports all test generators in test functions, test classes, and in unittest TestCase subclasses. nose supports them only in test functions and test classes that do not subclass unittest.TestCase. See: 加载程序:测试生成器 and 加载程序:参数化测试 for more.

配置

nose expects plugins to make all of their configuration parameters available as command-line options. nose2 expects almost all configuration to be done via configuration files. Plugins should generally have only one command-line option: the option to activate the plugin. Other configuration parameters should be loaded from config files. This allows more repeatable test runs and keeps the set of command-line options small enough for humans to read. See: 配置nose2 for more.

插件加载

nose uses setuptools entry points to find and load plugins. nose2 does not. Instead, nose2 requires that all plugins be listed in config files. This ensures that no plugin is loaded into a test system just by virtue of being installed somewhere, and makes it easier to include plugins that are part of the project under test. See: 配置nose2 for more.

有限的支持 python setup.py test

nose2支持设置工具' python setup.py test 命令,但通过与nose 截然不同的方式。为了避免由于无法使用自定义测试运行程序配置SETUPTOOLS测试命令而导致的内部复杂性,当以这种方式运行时, nose2基本上劫持了测试运行过程 . “测试套件”是指 nose2.collector.collector() 实际返回 is 隐藏在测试用例内部的测试运行程序。它正常加载和运行测试,设置自己的测试运行程序和测试结果,并调用 sys.exit() 它本身——完全绕过测试运行程序和SETUPTOOLS/UnitTest创建的测试结果。这可能与某些项目不兼容。

插件API

nose2 implements a new plugin API based on the work done by Michael Foord in unittest2's plugins branch. This API is greatly superior to the one in nose, especially in how it allows plugins to interact with each other. But it is different enough from the API in nose that supporting nose plugins in nose2 is not practical: plugins must be rewritten to work with nose2. See: 正在写入插件 for more.

缺少插件

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包含大量默认为活动的插件。 .