特殊测试匹配:测试断言的模糊值匹配
tms的Python项目详细描述
tms:test match special
tms允许您在测试代码中测试值,在这里您可能无法测试 根据一个确切的已知值。
一些快速示例:
测试对象的类和实例属性:
assert zoo.get('elephant') == tms.InstanceOf(Elephant, name='nelly')
匹配数据结构:
assert resultset.any() == {'id': tms.InstanceOf(int), 'name': tms.Contains('bob'), 'data': tms.Anything()}
常见类型有快捷方式,例如:
tms.Bool() tms.Str() tms.Unicode() tms.Bytes() tms.Int() tms.Float()
测试输入/不输入:
assert 'business' == tms.Contains('sin') assert 'my lunch' == tms.DoesntContain('nuts')
测试属性:
assert Circle(1) == tms.InstanceOf(Circle, radius=1) assert Circle(1) == tms.InstanceOf(Circle, radius=tms.InstanceOf(int)) assert Circle(1) == tms.InstanceOf(Circle, has_attrs=['radius'])
测试任意条件:
assert 1 == tms.Int(lambda x: x > 0) assert Circle(1) == tms.InstanceOf(Circle, lambda x: x.radius == 1)
测试字典或类似dict的对象:
# Check that it contains keys and values assert {'x': 1} == tms.DictLike(x=1) # Check that it contains certain keys assert dict(x=1, y=2) == tms.Contains('x', 'y') # Check that it doesn't contain certain keys assert dict(x=1, y=2) == tms.DoesntContain('foo', 'bar')
组合测试:
assert mylunch == tms.InstanceOf(Sandwich) & tms.DoesntContain(cheese)
与hamcrest不同,tms使用 __eq__计算比较的方法。这意味着它可以与python的 内置断言语句。这也意味着它可以和其他测试一起工作 库:您可以将一个tms.Matcher对象放入任何正则等式中 测试并让它工作。
注意,这也意味着它可能不适用于覆盖 方法。如果火柴似乎没有开火,试着穿上它 比较的左侧:
>>> import tms >>> class MySpecialObject(object): ... def __eq__(self, other): ... return False ... >>> MySpecialObject() == tms.Anything() False >>> tms.Anything() == MySpecialObject() True
更改日志
0.1.2(发布日期:2015-09-01)
- 为常用内置类型添加了快捷方式,因此现在可以编写tms.Int() 而不是tms.InstanceOf(int)。
- 添加了tms.Passes。这需要一个预期的任意函数 要返回布尔值, 例如assert random.randrange(1, 3) == tms.Passes(lambda x: 1 <= x < 3)。 它与tms.InstanceOf和tms.Anything集成, 所以你可以写 tms.InstanceOf(MyClass, lambda x: x.name.startswith('foo'))。
0.1.1
- 初始版本