跳转到主要内容

一组测试辅助工具、额外断言等。

项目描述

https://github.com/minddistrict/gocept.testing/workflows/tests/badge.svg https://coveralls.io/repos/github/minddistrict/gocept.testing/badge.svg

此软件包收集了编写测试的各种辅助工具。

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.Dictwith 调用期间发生异常时未恢复键。

1.5.1 (2012-09-12)

  • 修复文档和有缺陷的 1.5 版本。

1.5 (2012-07-10)

  • 添加 .patch.Dict,一个字典补丁上下文管理器。

1.4 (2012-06-04)

  • 添加 TempDir 固定装置。

  • 添加 assertStartsWithassertEndsWith

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)

1.1 (2011-11-10)

  • 添加 assertNothingRaised

1.0 (2011-11-02)

  • 首次发布:assertEllipsis

项目详情


下载文件

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

源分发

gocept.testing-4.0.tar.gz (15.0 kB 查看哈希)

上传时间

构建分发

gocept.testing-4.0-py3-none-any.whl (13.6 kB 查看哈希)

上传时间 Python 3

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面