跳转到主要内容

将unittest测试框架中添加到Python 2.4+的新功能回滚。

项目描述

unittest2是将Python 2.7及其以后版本中添加到unittest测试框架的新功能回滚的版本。它经过测试,可在Python 2.6、2.7、3.2、3.3、3.4和pypy上运行。

要使用unittest2而不是unittest,只需将import unittest替换为import unittest2

unittest2维护在一个mercurial仓库中。问题跟踪器在google code上

感谢Mark Roddy,现在有一个unittest2 0.5.1的Python 2.3版本。它作为一个单独的分支维护,并作为单独的下载。

为了避免pip安装错误版本的问题,unittest2的Python 2.3版本不能托管在PyPI上

曾经存在一个专门针对Python 3的unittest2版本。现在不再需要它,但仍然存在于PyPI上。该项目的名称为“unittest2py3k”,但使用相同的包名(“unittest2”)。

unittest2中的类从unittest中适当的类派生,因此您可以在不立即将所有测试切换到使用unittest2的情况下使用unittest2的测试运行基础设施。同样,您可以使用unittest2.TestCase上的新断言方法与标准的unittest测试运行基础设施。不是unittest2中所有的新功能都与标准的unittest测试加载器和运行器结果对象兼容。

通常,关于unittest2的文档,请参阅CPython的最新文档。

新功能包括

  • addCleanups - 更好的资源管理

  • 许多新的断言方法,包括比较列表、集合、字典、Unicode字符串等的更好默认值,以及指定比较特定类型的默认方法的能力

  • assertRaises作为上下文管理器,之后可以访问异常

  • 测试发现和新的命令行选项(包括failfast和在测试运行期间更好地处理Ctrl-C)

  • 类和模块级别的固定值:setUpClasstearDownClasssetUpModuletearDownModule

  • 测试跳过和预期的失败

  • assertAlmostEqual添加了新的delta关键字参数,以进行更有用的比较,并比较非数字对象(如日期时间)

  • 从模块或包中加载测试的load_tests协议

  • TestResult上的startTestRunstopTestRun方法

  • 各种其他API改进和修复

在我编写适当的文档之前,有关所有新功能的最佳信息是Python 2.7的开发版本Python文档

查找有关在Python 2.7中添加或更改的功能的说明。

差异

unittest2和Python 2.7中的unittest之间的差异

assertItemsEqual不会静默Py3k警告,因为此使用warnings.catch_warnings(),它是Python 2.6中引入的(并用作上下文管理器,这将是与Python 2.4一起工作的痛苦)。

TestCase.longMessage 默认为 True,因为这样做更好。出于向后兼容的原因,Python 2.7 中默认为 False。

python -m package 在 Python 2.7 之前的版本中无法工作。unittest2 的命令行功能由 unit2(和 unit2.py) 脚本提供。

unittest2 包含一个非常基本的与 setuptools 兼容的测试收集器。在您的 setup.py 中指定 test_suite = 'unittest2.collector'。这将从包含 setup.py 的目录开始使用默认参数进行测试发现,因此它可能最有用作为一个示例(见 unittest2/collector.py)。

在 unittest2 中,TextTestResult.stopTestRun 负责调用 printErrors。这是一种期望的行为,但在 Python 3.1 中,TestResult.stopTestRun 被文档记载为空的,子类不需要调用它。这将使更改与向后兼容性不符,需要考虑。

问题

一个具有意外成功的 TestResult 对象对 result.wasSuccessful() 返回 True。很难知道这是否是正确的行为。

如果使用点分隔的路径名进行测试发现,则全局安装的模块/包仍将被用于当前目录中的包。在从点分隔的路径名进行发现时,我们可以检查这个特定的案例。

removeHandler 装饰器也可以是一个上下文管理器。

问题 8313:在 unittest 迹踪回溯中,<不可打印的 AssertionError 对象> 消息难以在 Python 2.7 之前的版本中修复。Python 2.7 中的修复依赖于 traceback 模块和 traceback 对象的更改。由于问题很少见,我在 unittest2 中未修复它。

在 unittest2(和 unittest)的几个地方,对异常调用 str(...) 以获取异常消息。如果异常是用非 ascii unicode 创建的,则可能会失败。这种情况很少见,除非它实际上被报告为某个人的问题,否则我不会解决它。

对文本或长序列(使用 assertSequenceEqualassertMultiLineEqual 等)的比较可能需要很长时间来生成失败消息的差异。这些方法使用 prettyprintdifflib

在 Python3.2 中的 unittest2 源代码中执行 pip install -e . 将失败,除非已安装 setuptools > 0.6.24。这是需要较新版本的 setuptools(以避免使用 execfile)和 setup_requires 回退到不懂得如何即时升级 setuptools 的 easy_install 的组合,这阻止了它在 unittest2 中修复。

变更日志

2015-06-20 - 1.1.0

  • 问题 #15836:assertRaises()、assertRaisesRegex()、assertWarns() 和 assertWarnsRegex() 断言现在检查第一个参数的类型,以防止可能的用户错误。基于 Daniel Wagner-Hall 的补丁。

  • 问题 #24134:assertRaises()、assertRaisesRegex()、assertWarns() 和 assertWarnsRegex() 检查现在在上下文管理器模式中,如果可调用为 None 或传递了关键字参数 except msg,则发出弃用警告。

  • 问题 #22903:unittest.loader 在无法导入测试模块时创建的模拟测试用例现在可以序列化了。

2015-03-12 - 1.0.1

  • Unittest2 问题 #94:需要至少 1.4 的 six。

2015-03-06 - 1.0.0

  • 问题 #22936:允许在迹踪回溯中显示局部变量。

2014/11/05 - 0.8

  • 问题 #22457:在发现中的 start_dir 中尊重 load_tests。

  • 问题 #22894:在 failfast 模式下,TestCase.subTest() 会导致测试套件停止,即使在没有任何失败的情况下也是如此。

2014/10/31 - 0.7.1

0.7.0 版本修复的修复。同时从手动和入口点脚本切换到仅入口点脚本,以减少未来类似疏忽的可能性。

2014/10/31 - 0.7.0

此版本包含从 cPython 3.5 迁移的所有(我认为)自 2010 年以来的提交,截至今天。

2014/10/28 - 0.6.0

非常感谢 Mark Roddy 和 Ezio Melotti,他们对本次发布做出了重大贡献。

  • 将支持的 Python 版本更改为从 2.6 开始,并包括所有发布的 3.x 和 pypy 版本。(Robert Collins)

  • 不带参数调用 unit2 将开始测试发现。

  • 添加了 TestCase.assertWarnsTestCase.assertWarnsRegexp 上下文管理器。

  • 修复了 Python 问题 9926。正确调用了重写 __call__ 方法的 TestSuite 子类。

  • TestCase.assertSequenceEqual 中删除了未使用的 maxDiff 参数。

  • 对于不支持的结果对象(缺少 addSkip 方法)的 DeprecationWarning 变为 RuntimeWarning。

  • TestCase.assertWarns 添加为上下文管理器。

2010/07/12 - 0.5.1

将 setuptools 创建的脚本名称从“unit2.py”恢复为“unit2”。(因为任何情况下 setuptools 都会为控制台脚本创建 stub .exes,所以这不是必要的。)

2010/07/11 - 0.5.0

添加了与 setuptools 兼容的测试收集器(非常基础)。在您的 setup.py 中指定 test_suite = 'unittest2.collector'

TestSuite.debug()TestCase.debug() 现在将执行清理函数和类以及模块级别的设置和清理。

不再对 Python 2.4/2.5 中的 os.path.relpath 进行 monkey-patch,以免项目意外依赖于我们的补丁。由 Konrad Delong 贡献。

添加了一个针对特定 Python 版本的 unit2 入口点。例如,如果 unittest2 与 Python 2.6 一起安装,则会创建一个 unit2-2.6 脚本。(需要 setuptools 或 distribute。)

Python 2.3 兼容性(在存储库的 python2.3 分支中),由 Mark Roddy 贡献。

Windows 上创建 setuptools 控制台脚本入口点时使用 '.py' 脚本。

与 Python 2.7 最终版本的功能相同。

2010/06/06 - 0.4.2

改进了 unit2 discover -h 的帮助信息。

在 unittest.TestCase.setUpClass 或 setUpModule 中,SkipTest 现在被视为跳过而不是错误。

由于 TestCase.assertSequenceEqual 导致的过大差异不再包含在失败报告中。(由 TestCase.maxDiff 控制。)

测试发现期间匹配文件是在 TestLoader._match_path 中完成的。此方法可以在子类中重写,例如,通过匹配完整文件路径或使用正则表达式进行匹配。

添加了 unit2 测试运行器脚本的 setuptools 兼容入口点。由 Chris Withers 贡献。

测试修复为与 Python 2.7 兼容,其中弃用警告默认静默。

与 Python 2.7 RC 1 中的 unittest 功能相同。

2010/05/09 - 0.4.1

如果测试发现从错误的位置导入模块(通常是因为模块全局安装,而用户期望在另一个位置运行开发版本中的测试),则发现会因 ImportError 而停止,并报告问题。

添加了 assertRegexpMatchesassertNotRegexpMatches 的文档字符串。

将函数放入测试套件中不再导致崩溃。

与 Python 2.7 Beta 2 中的 unittest 功能相同。

2010/04/08 - 0.4.0

添加了用于删除控制-C 处理器的 removeHandler

assertAlmostEqualassertNotAlmostEqual 添加了 delta 关键字参数。

添加了 -b 命令行选项(以及 TestResult.buffer),用于在测试运行期间缓冲 stdout / stderr。

添加了 TestCase.assertNotRegexpMatches

允许使用点分模块名称而不是路径进行测试发现。

现在所有需要 signal 模块的导入都是可选的,以与 IronPython(或其他没有此模块的平台)兼容。

测试已修复以与 nosetest 兼容。

2010/03/26 - 0.3.0

删除了 assertSameElements 并添加了 assertItemsEqual;断言序列包含相同的元素。

添加了 -f/–failfast 命令行选项,在第一个失败或错误时停止测试运行。

增加 -c/–catch 命令行选项,以在测试运行期间更好地处理 Control-C。

添加了 BaseTestSuite,用于那些不希望支持共享类和模块设置的框架。

跳过的测试方法不再在它们周围调用 setUptearDown

错误的 load_tests 函数不再停止测试发现。

现在可以使用非字符串作为失败消息。

在创建失败消息时,修复了可能导致 UnicodeDecodeError 的潜在问题。

将单体测试模块拆分为一个包。

BUGFIX:现在为 unit2 脚本显示了正确的使用消息。

BUGFIX:模块全局变量中的 __unittest 从报告的堆栈跟踪中裁剪了该模块的框架。

2010/03/06 - 0.2.0

TextTestRunner 现在与旧的结果对象和标准(非 TextTestResult)的 TestResult 对象兼容。

添加了 setUpClass / tearDownClass / setUpModule / tearDownModule

2010/02/22 - 0.1.6

修复了与旧 TestResult 对象的兼容性。现在可以使用 nosetests 运行新测试(对于不支持跳过等方法的 TestResult 对象,会显示弃用警告)。

0.1

初始发布。

待办事项

  • 记录 SkipTestBaseTestSuite

发布流程

1. 确保在此文档的更改日志中有一个条目。1. 更新 unittest2/__init__.py 中的 __version__。1. 提交。1. 为版本创建标签(例如 hg tag 0.6.0)。1. 推送以确保没有未解决的补丁,也没有竞争空间。1. 运行 make release 以构建 sdist 和 wheel 并上传到 pypi。

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定要选择哪个,请了解有关 安装包 的更多信息。

源分发

unittest2-1.1.0.tar.gz (81.4 kB 查看哈希值)

上传时间

构建分发

unittest2-1.1.0-py2.py3-none-any.whl (96.4 kB 查看哈希值)

上传时间 Python 2 Python 3

由以下支持

AWSAWS云计算和安全赞助商DatadogDatadog监控FastlyFastlyCDNGoogleGoogle下载分析MicrosoftMicrosoftPSF赞助商PingdomPingdom监控SentrySentry错误日志StatusPageStatusPage状态页面