ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Hamcrest使用

2022-06-21 18:37:28  阅读:122  来源: 互联网

标签:__ 匹配 self 给定 使用 day Hamcrest


简介

  • Hamcrest支持多种语言,是可以自定义匹配器对象的框架,可以更灵活的定义“匹配”规则,在很多情况下匹配器都是很好用的,比如UI校验、数据过滤,尤其在测试方面进行断言,之前用的最多的就是assert了,Hamcrest使用起来会更加的灵活。下面已python为例进行介绍。

安装

`pip install Pyhamcrest`

示例

from hamcrest import *
import unittest

class HamcrestTest(unittest.TestCase):
    def testEquals(self):
        theString = 'Hello Hamcrest'
        myString = 'Hello Hamcrest'
        # assert_that函数是一个用于进行测试断言的方法
        assert_that()
        assert_that(theString, equal_to(myString))


if __name__ == '__main__':
    unittest.main()

Hamcrest在python中提供的API:

对象

  • equal_to - 匹配相等对象
  • has_length - 长度匹配 len()
  • has_property - 匹配给定名称的属性值
  • has_properties - 匹配具有所给定属性的对象
  • has_string - 匹配字符串 str()
  • instance_of - 匹配对象类型
  • none, not_none - 匹配none或not none
  • same_instance - 匹配相同的对象
  • calling, raises - 封装一个方法调用并断言它引发异常

数字

  • close_to - 匹配接近给定的数字值
  • greater_than, greater_than_or_equal_to, less_than, less_than_or_equal_to - 匹配数字顺序

文本

  • contains_string - 匹配部分字符串
  • ends_with - 匹配字符串的结尾
  • equal_to_ignoring_case - 匹配完整的字符串但忽略大小写
  • equal_to_ignoring_whitespace - 匹配完整的字符串,但忽略多余的空格
  • matches_regexp - 使用正则表达式匹配字符串
  • starts_with - 匹配字符串的开头
  • string_contains_in_order - 按相对顺序匹配字符串的各个部分

逻辑

  • all_of - 如果所有匹配器都匹配才匹配,像Java里的&&
  • any_of - - 如果任何匹配器匹配就匹配,像Java里的||
  • anything - 匹配任何东西,如果不关心特定值则在复合匹配器中很有用
  • is_not, not_ -如果包装的匹配器不匹配器时匹配,反之亦然

序列

  • contains - 完全匹配整个序列
  • contains_inanyorder - 以任何顺序匹配整个序列
  • has_item - 只要给定项目在序列中出现则匹配
  • has_items - 如果所有给定项以任意顺序出现在序列中则匹配
  • is_in - 在给定顺序中如果给定项出现则匹配
  • only_contains - 在给定顺序中如果序列的项目出现则匹配
  • empty - 如果序列为空则匹配

字典

  • has_entries - 匹配具有键值对列表的字典
  • has_entry - 匹配包含键值对的字典
  • has_key - 使用键匹配字典
  • has_value - 使用值匹配字典

装饰器

  • calling - 在延迟中封装一个可调用对象,在后续的调用行为中匹配
  • raises - 确保延迟调用可以按预期方式引发
  • described_as - 添加一个定制的失败表述装饰器
  • is_ - 改进可读性装饰器

这些匹配器中的许多参数不仅接受匹配值,还接受另一个匹配器,因此可以组合匹配器以提高灵活性。 例如,only_contains(less_than(5))将匹配每个小于5项目的任何序列。

自定义匹配器

  • 让我们编写自己的匹配器来测试日期是否是星期六
def testDateIsOnASaturday(self):
    d = datetime.date(2008, 4, 26)
    assert_that(d, is_(on_a_saturday()))
  • 具体实现:
from hamcrest.core.base_matcher import BaseMatcher
from hamcrest.core.helpers.hasmethod import hasmethod


class IsGivenDayOfWeek(BaseMatcher):
    def __init__(self, day):
        self.day = day  # Monday is 0, Sunday is 6

    def _matches(self, item):
        if not hasmethod(item, "weekday"):
            return False
        return item.weekday() == self.day

    def describe_to(self, description):
        day_as_string = [
            "Monday",
            "Tuesday",
            "Wednesday",
            "Thursday",
            "Friday",
            "Saturday",
            "Sunday",
        ]
        description.append_text("calendar date falling on ").append_text(
            day_as_string[self.day]
        )


def on_a_saturday():
    return IsGivenDayOfWeek(5)

标签:__,匹配,self,给定,使用,day,Hamcrest
来源: https://www.cnblogs.com/xxiaow/p/16397855.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有