美文网首页
单元测试之Hamcrest

单元测试之Hamcrest

作者: sylcrq | 来源:发表于2016-11-15 11:53 被阅读139次

    Hamcrest

    Matchers that can be combined to create flexible expressions of intent

    使用Hamcrest

    @Test
    public void test_hamcrest_using() {
        boolean a = true;
        boolean b = true;
        // all statements test the same
        // a==b
        assertThat(a, is(b));
        assertThat(a, is(equalTo(b)));
        assertThat(a, equalTo(b));
    
        // 满足任意一个条件
        assertThat("test", anyOf(is("testing"), containsString("est")));
    
        // 类型判断
        assertThat(Long.valueOf(1), instanceOf(Long.class));
    
        // 容器数据判断
        List<Integer> list = Arrays.asList(2, 3, 4);
        assertThat(list, hasSize(3));
        assertThat(list, contains(2, 3, 4));
        assertThat(list, containsInAnyOrder(4, 3, 2));
        assertThat(list, everyItem(greaterThan(1)));
    
        // 自定义matcher
        assertThat("aaabbbaaaa", RegexMatcher.matchesRegex("a*b*a*"));
    }
    

    常用的Hamcrest matchers

    • allOf - matches if all matchers match (short circuits)
    • anyOf - matches if any matchers match (short circuits)
    • not - matches if the wrapped matcher doesn’t match and vice
    • equalTo - test object equality using the equals method
    • is - decorator for equalTo to improve readability
    • hasToString - test Object.toString
    • instanceOf, isCompatibleType - test type
    • notNullValue, nullValue - test for null
    • sameInstance - test object identity
    • hasEntry, hasKey, hasValue - test a map contains an entry, key or value
    • hasItem, hasItems - test a collection contains elements
    • hasItemInArray - test an array contains an element
    • closeTo - test floating point values are close to a given value
    • greaterThan, greaterThanOrEqualTo, lessThan, lessThanOrEqualTo
    • equalToIgnoringCase - test string equality ignoring case
    • equalToIgnoringWhiteSpace - test string equality ignoring differences in runs of whitespace
    • containsString, endsWith, startsWith - test string matching

    自定义Hamcrest matcher

    public class RegexMatcher extends TypeSafeMatcher<String> {
        private final String regex;
    
        public RegexMatcher(final String regex) {
            this.regex = regex;
        }
    
        @Override
        public void describeTo(final Description description) {
            description.appendText("matches regular expression=`" + regex + "`");
        }
    
        @Override
        public boolean matchesSafely(final String string) {
            return string.matches(regex);
        }
    
        // matcher method you can call on this matcher class
        public static RegexMatcher matchesRegex(final String regex) {
            return new RegexMatcher(regex);
        }
    }
    

    相关文章

      网友评论

          本文标题:单元测试之Hamcrest

          本文链接:https://www.haomeiwen.com/subject/rkgkpttx.html