将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)
类和模块级别的固定值:setUpClass、tearDownClass、setUpModule、tearDownModule
测试跳过和预期的失败
为assertAlmostEqual添加了新的delta关键字参数,以进行更有用的比较,并比较非数字对象(如日期时间)
从模块或包中加载测试的load_tests协议
TestResult上的startTestRun和stopTestRun方法
各种其他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 创建的,则可能会失败。这种情况很少见,除非它实际上被报告为某个人的问题,否则我不会解决它。
对文本或长序列(使用 assertSequenceEqual 或 assertMultiLineEqual 等)的比较可能需要很长时间来生成失败消息的差异。这些方法使用 prettyprint 和 difflib。
在 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.assertWarns 和 TestCase.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 而停止,并报告问题。
添加了 assertRegexpMatches 和 assertNotRegexpMatches 的文档字符串。
将函数放入测试套件中不再导致崩溃。
与 Python 2.7 Beta 2 中的 unittest 功能相同。
2010/04/08 - 0.4.0
添加了用于删除控制-C 处理器的 removeHandler。
为 assertAlmostEqual 和 assertNotAlmostEqual 添加了 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,用于那些不希望支持共享类和模块设置的框架。
跳过的测试方法不再在它们周围调用 setUp 和 tearDown。
错误的 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
初始发布。
待办事项
记录 SkipTest 和 BaseTestSuite
发布流程
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 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 22882a0e418c284e1f718a822b3b022944d53d2d908e1690b319a9d3eb2c0579 |
|
MD5 | f72dae5d44f091df36b6b513305ea000 |
|
BLAKE2b-256 | 7fc42b0e2d185d9d60772c10350d9853646832609d2f299a8300ab730f199db4 |