特殊测试匹配:测试断言的模糊值匹配

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.InstanceOftms.Anything集成, 所以你可以写 tms.InstanceOf(MyClass, lambda x: x.name.startswith('foo'))

0.1.1

  • 初始版本

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Java正则表达式模式编译最佳实践(使用enum)   使eclipse动态web项目在real server中拥有站点的java步骤   java创建JSON对象   JavaJBox2D+Slick2D不会发生冲突   java如何在ANTLR中处理左联想语法   java如何在JaCoCo故障保护测试执行中禁用stacktrace微调?   java有没有办法将jar库指向与Tomcat8中的war不同的位置以减少war的大小?   安卓在Java中删除主文件表   java如何将用户输入从GUI传递到主类   如何在Java中更改字符串两次(基于前面的更改)?(内部代码)   ios java小程序无法将文件保存到本地pc   透明度Java BuffereImage如何知道像素是否透明   java断开连接后如何重新连接到netty通道?   加载bean的java打印类型以及名称   java无法从活动移动到ViewPager   继承为什么java在子类中编写类的packageprivate成员时出错   如何在eclipse中导入java项目?   java在verticle vert中实例化类的危险。十、   aws cdk如何在aws cdk java中向事件规则添加目标?