跳转到主要内容

测试辅助工具集合。

项目描述

cykooz.testing 是测试辅助工具的集合。

工具

Dict

一个字典对象,可以在不考虑未出现在 Dict 实例中的键的情况下与其他字典对象进行比较。

>>> from cykooz.testing import Dict
>>> expected = Dict(a=1, b='foo')
>>> d1 = {'a': 1, 'b': 'foo', 'c': True}
>>> d1 == expected
True
>>> d1 != expected
False
>>> d2 = {'a': 1, 'c': True}
>>> d2 == expected
False
>>> d1 != d2
True
>>> Dict({'a': 1})
Dict({'a': 1})

简写别名

>>> from cykooz.testing import D
>>> {'a': 1, 'b': 'foo'} == D({'a': 1})
True

List

一个列表对象,可以在不考虑其他列表对象中包含的额外项目的情况下与其他列表对象进行比较。

>>> from cykooz.testing import List
>>> expected = List([1, 'foo'])
>>> l1 = [1, 'foo', True]
>>> l1 == expected
True
>>> l1 != expected
False
>>> l2 = [1, True]
>>> l2 == expected
False
>>> l2 != expected
True
>>> expected == [1]
False
>>> [{'a': 1}, {'b': 2}] == List([Dict(), Dict()])
True

也支持在不考虑项目顺序的情况下进行比较。

>>> expected = List([True, 1], ignore_order=True)
>>> l1 = [1, 'foo', True]
>>> l1 == expected
True
>>> l1 != expected
False
>>> [{'a': 1}, {'b': 2}] == List([Dict(), Dict()], ignore_order=True)
Traceback (most recent call last):
...
TypeError: unhashable type: 'Dict'

简写别名

>>> from cykooz.testing import L
>>> [1, 'foo', True] == L([1, 'foo'])
True

AnyValue

此类的实例等于任何其他值。

>>> from cykooz.testing import AnyValue
>>> v = AnyValue()
>>> v == 1
True
>>> 1 == v
True
>>> v != 1
False
>>> v == {'a': 1, 'b': 'foo'}
True
>>> v == [1, 2, 3, 'b']
True
>>> v == AnyValue()
True
>>> v
<any value>
>>> {v: 1}
Traceback (most recent call last):
...
TypeError: unhashable type: 'AnyValue'
>>> [v, v, v] == [1, 2, 'foo']
True
>>> [v, v, 1] == [1, 2, 'foo']
False
>>> [v, v] == [1, 2, 'foo']
False
>>> {'a': v, 'b': 2} == {'a': 1, 'b': 2}
True

简写别名

>>> from cykooz.testing import ANY
>>> 1 == ANY
True

RegExpString

如果此类的实例匹配给定的正则表达式模式,则等于任何其他值。

>>> from cykooz.testing import RegExpString
>>> v = RegExpString('first.*')
>>> v == 1
False
>>> 1 == v
False
>>> v != 1
True
>>> v == 'first class'
True
>>> 'first class' == v
True
>>> v != 'first class'
False
>>> v
<RegExpString: first.*>
>>> {v: 1}
Traceback (most recent call last):
...
TypeError: unhashable type: 'RegExpString'
>>> [v, v, v] == [1, 2, 'first class']
False
>>> [v, v, v] == ['first class', 'first bus', 'first time']
True

简写别名

>>> from cykooz.testing import R
>>> 'first class' == R('first.*')
True

Url

一个URL对象,可以在不考虑查询字符串中编码、转义和参数顺序的任意性方面与其他URL对象进行比较。

>>> from cykooz.testing import Url
>>> url1 = Url('https://domain.com/container?limit=6&offset=0')
>>> url2 = Url('https://domain.com/container?offset=0&limit=6')
>>> url1 == url2
True
>>> url2 = Url('https://domain.com/container?limit=6')
>>> url1 == url2
False
>>> url1 == 'https://domain.com/container?offset=0&limit=6'
True
>>> 'https://domain.com/container?offset=0&limit=6' == url1
True
>>> {'key': 'https://domain.com/container?offset=0&limit=6'} == {'key': url1}
True

Json

此类的实例将与任何 'bytes' 或 'str' 值相等,如果从该值解码的JSON解码器对象等于此类的第一个参数。

>>> from cykooz.testing import Json
>>> v = Json({'foo': 1, 'bar': 'hello'})
>>> other = '{"bar": "hello", "foo": 1}'
>>> v == other
True
>>> other == v
True
>>> other != v
False
>>> v == 1
False
>>> 1 == v
False
>>> v != 1
True
>>> v == 'not json'
False
>>> 'not json' == v
False
>>> v != 'not json'
True
>>> v
<Json: {'foo': 1, 'bar': 'hello'}>
>>> {v: 1}
Traceback (most recent call last):
...
TypeError: unhashable type: 'Json'
>>> [v, v, v] == [other, 2, 'first class']
False
>>> [v, v, v] == [other, other, other]
True
>>> '"json str"' == Json('json str')
True

复杂示例

>>> from cykooz.testing import D, L, R, J, Url, ANY
>>> some_value = {
...     'created': '2020-04-14T12:34:00.002000+00:00',
...     'is_active': True,
...     'items': [
...         {'key': 'a', 'value': 1},
...         {'key': 'b', 'value': 2},
...         {'key': 'c', 'value': 3},
...     ],
...     'source': 'https://domain.com/item?p=0&t=total',
...     'response': '{"status": 200, "body": "OK"}',
...     'size': 1024,
... }
>>> some_value == D({
...     'created': R('^2020-04.*'),
...     'is_active': True,
...     'items': L([
...         {'key': 'a', 'value': 1},
...         D({'value': ANY}),
...     ]),
...     'source': Url('https://domain.com/item?t=total&p=0'),
...     'response': J({'status': 200, 'body': ANY}),
... })
True

变更日志

1.2 (2021-08-27)

更改

  • ignore_order 参数添加到 List 辅助函数中,以便在不考虑项目顺序的情况下比较列表。

1.1.2 (2020-04-14)

错误修复

  • 将新的辅助函数添加到 __all__ 中。

1.1 (2020-04-14)

功能

  • 添加了新的辅助函数 Json

1.0.3 (2020-03-20)

错误修复

  • 修复了命名空间声明。

1.0.1 (2019-07-12)

错误修复

  • 修复了“开发状态”的包。

1.0 (2019-07-12)

功能

  • 首次发布。

项目详情


下载文件

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

源代码分发

cykooz.testing-1.2.tar.gz (10.8 kB 查看哈希值)

上传时间 源代码

构建分发

cykooz.testing-1.2-py2.py3-none-any.whl (6.3 kB 查看哈希值)

上传时间 Python 2 Python 3

支持