一组测试辅助工具、额外断言等。
项目描述
此软件包收集了编写测试的各种辅助工具。
assertEllipsis
当使用Testbrowser与unittest.TestCase时(而不是doctest)非常有帮助的断言。
一些示例
class MyTest(unittest.TestCase, gocept.testing.assertion.Ellipsis): # [...] self.assertEllipsis('...bar...', 'foo bar qux') # -> nothing happens self.assertEllipsis('foo', 'bar') # -> AssertionError: Differences (ndiff with -expected +actual): - foo + bar self.assertNotEllipsis('foo', 'foo') # -> AssertionError: "Value unexpectedly matches expression 'foo'."
使用时,除了从 unittest.TestCase 继承外,还需要从 gocept.testing.assertion.Ellipsis 继承。
assertStartsWith, assertEndsWith
class MyTest(unittest.TestCase, gocept.testing.assertion.String): def test_something(self): self.assertStartsWith('foo', 'foobar') # --> pass self.assertEndsWith('bar', 'foobar') # --> pass self.assertStartsWith('qux', 'foobar') # --> fail self.assertEndsWith('qux', 'foobar') # --> fail
assertNothingRaised
这是 assertRaises() 的相反操作,它使得某些测试更加易于阅读。与 assertRaises() 类似,它也可以用作上下文管理器。
class MyTest(unittest.TestCase, gocept.testing.assertion.Exceptions): # [...] self.assertNothingRaised(do_something, 1, 2, 3) with self.assertNothingRaised(): do_something(1, 2, 3)
mock patch context
gocept.testing.mock.Patches 收集在整个 TestCase 中有效的 mock 补丁,并在 tearDown 中一次性重置它们(这正在等待上游集成为 mock.patcher(),请参阅 问题 30)。
class MyTest(unittest.TestCase): def setUp(self): self.patches = gocept.testing.mock.Patches() def tearDown(self): self.patches.reset() def test_something(self): compile = self.patches.add('re.compile')
它提供了三种方法:
- add:
封装了 mock.patch()。
- add_object:
封装了 mock.patch.object。
- add_dict:
封装了 mock.patch.dict。
请注意,gocept.testing 不声明对 mock 的依赖,以使其尽可能轻量级,因此客户端需要自己处理。
如果您想节省输入,可以将 gocept.testing.mock.PatchHelper 混入到您的 TestCase 中,它定义了一个 setUp 方法,用于实例化 Patches,并在 tearDown 中调用它的 reset()。
assertCalledWith
这是围绕 mock.assert_called_with 的语法糖,因此您可以这样写:
class MyTest(unittest.TestCase, gocept.testing.mock.Assertions): def test_something(self): dummy = mock.Mock() dummy(True) self.assertCalledWith(dummy, True)
而不是:
dummy.assert_called_with(True)
Mocking properties
gocept.testing.mock.Property 是直接从 mock 文档 中提取的语法糖,允许您像这样修补属性:
class Dummy(object): @property def foo(self): return False with mock.patch('Dummy.foo', gocept.testing.mock.Property()) as foo: foo.return_value = 'something else'
Attribute patch context
这与模拟无关,它是设置和自动重置对象属性的帮助程序。
class MyTest(unittest.TestCase): def setUp(self): self.patches = gocept.testing.patch.Patches() self.subject = MyClass() def tearDown(self): self.patches.reset() def test_something(self): self.assertEqual('one', self.subject.foo) self.patches.set(self.subject, 'foo', 'two') self.assertEqual('two', self.subject.foo)
Method call patch context
这允许在稍后自动调用方法并重置它。目前,仅支持接受单个参数的方法,通过传递旧值(应重置的值)和新值来实现。
class MyTest(unittest.TestCase): def setUp(self): self.patches = gocept.testing.patch.Patches() def tearDown(self): self.patches.reset() def test_something(self): self.patches.call( zope.component.hooks, 'setSite', zope.component.hooks.getSite(), new_site)
Dict patching context manager
gocept.testing.patch.Dict 是一个上下文管理器,允许在字典中更改值。退出时恢复原始字典。例如,可以用于临时更改 os.environ 中的值。
>>> with gocept.testing.patch.Dict(os.environ, foo='bar', qwe='asdf'): print os.environ.get('foo') bar >>> print os.environ.get('foo') None
临时目录
gocept.testing.fixture.TempDir 封装了创建临时目录并在测试运行后删除的常见模式。目录的名称可用作 self.tmpdir。请注意,由于 unittest.TestCase 不调用 super,您需要首先混合 TempDir。
class MyTest(gocept.testing.fixture.TempDir, unittest.TestCase): def test_something(self): self.assertTrue(os.path.isdir(self.tmpdir))
比较mtimes
gocept.testing.mtime.Newer 检查生成的文件是否至少与它们的源对应项一样新(类似于 make 的工作方式)。
class MyTest(gocept.testing.mtime.Newer, unittest.TestCase): source_ext = '.js' target_ext = '.min.js' message = 'run jsmin to correct this' def test_minified_js_files_are_younger_than_non_minified_ones(self): self.check_files(pkg_resources.resource_filename( 'my.package', 'resources/js'))
开发
源代码的 Git 仓库以及问题跟踪器可在 https://github.com/minddistrict/gocept.testing 获得。
更改日志
4.0 (2024-05-21)
向后不兼容的更改
停止支持 Python 3.7 和 3.8。
功能
添加对 Python 3.11、3.12 和 3.13 的支持(截至 beta 1)。
3.0 (2021-08-26)
向后不兼容的更改
将许可证从 ZPL 更改为 MIT。
停止支持 Python 2、3.4、3.5 和 3.6。
功能
添加对 Python 3.8、3.9 和 3.10 的支持(截至 rc.1)。
2.0.post1 (2018-11-22)
修复 PyPI 页面渲染。
2.0 (2018-11-22)
停止支持 Python 2.6 和 3.3。
添加对 Python 3.6、3.7、PyPy 和 PyPy3 的支持。
选择显式 [mock] 额外选项来在 Python < 3.3 上使用 gocept.testing.mock。
1.11 (2016-01-18)
修复主页 URL。
声明支持 Python 3.4 和 Python 3.5。
停止支持 Python 3.2。
1.10.1 (2014-04-28)
使 assertNotEllipsis() 与 py.test 兼容。
声明支持 Python 3.3。
1.10 (2014-02-13)
删除 retry 装饰器,因为它相当无用的,因为它没有考虑 setUp/tearDown。
1.9 (2013-12-20)
添加 retry 装饰器,使易出错的测试多次运行,只有每次都失败时才失败。
使用 py.test 替代 zope.testrunner 来进行本包的测试。
1.8 (2013-07-17)
Python 3 兼容性。
现在项目合并后,依赖 setuptools 而不是 distribute。
使用当前的 buildout 和 recipes 进行开发。
1.7 (2013-04-18)
修复我们自己的测试套件的 Python-2.6 兼容性。
引入 PatchHelper。
1.6.0 (2013-01-07)
添加更新的 mtime 检查。
1.5.2 (2012-09-14)
.patch.Dict 在 with 调用期间发生异常时未恢复键。
1.5.1 (2012-09-12)
修复文档和有缺陷的 1.5 版本。
1.5 (2012-07-10)
添加 .patch.Dict,一个字典补丁上下文管理器。
1.4 (2012-06-04)
添加 TempDir 固定装置。
添加 assertStartsWith,assertEndsWith。
1.3.2 (2012-05-09)
允许 assertEllipsis 与混合 unicode/bytes 参数一起工作(假设 bytes 是 UTF-8,就像 zope.testbrowser 一样)。
1.3.1 (2012-02-03)
在 assertNothingRaised 中显示原始跟踪。
1.3 (2011-12-16)
添加属性和简单可调用对象的补丁辅助器。
1.2.1 (2011-12-09)
使 Python-3 兼容(至少在语法上)。
1.2 (2011-12-09)
为 mock 添加 Patches 上下文(上游实现待定,见 <http://code.google.com/p/mock/issues/detail?id=30>)
添加 assertCalledWith。
添加 mock.Property。
1.1 (2011-11-10)
添加 assertNothingRaised。
1.0 (2011-11-02)
首次发布:assertEllipsis
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。
源分发
构建分发
gocept.testing-4.0.tar.gz 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 6f2ca03a7c17b133380caceb387584be1f48b8cacf0217f2560561850bfed5bc |
|
MD5 | ce0abe6b9f6bb7302ed7bf1e735f26e9 |
|
BLAKE2b-256 | 3aa5c6ef2ae0e96fcecb40dc24247726e8ec3a1cfcbc12a9e4713c5274529e59 |
gocept.testing-4.0-py3-none-any.whl 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 8c5c55f2bce21897e08710fec0b5ae4aa5b46794f783e1f2013cd1bc423c4b8f |
|
MD5 | 2fdc4abb46f8571a57416eb0032debc5 |
|
BLAKE2b-256 | 945c1d6c92a0f173b2f2456a6de6e389844f13e7c261c31510706c224b4fd528 |