Hamcrest


    Hamcrest比起JUnit的assert系列方法來,有更好的可讀性,它按照參數從左到右的符合自然的順序來展示,如actual is(notNullValue()),是對測試斷言的改進。同時不會被哪個參數是actual,哪個是expect而混淆。除此之外,Hamcrest提供了更豐富的比較方法,不僅包括基本類型,也包括對象判斷、集合/數組判斷等一系列方法,同時還有allOf/anyOf這樣的組合判斷,甚至有判斷xml中是否存在相應xpath的判斷。

    所有的Hamcrest支持的assert全部在org.hamcrest.Matchers類下的靜態方法。下面是幾個使用例子:

    

public class CoreShowcase {
    @Test
    public void test(){
        assertThat(true,is(true));
        assertThat(false,is(false));

        assertThat("2",is(equalTo("2")));
        assertThat(2,is(equalTo(2)));
        assertThat("aBcD",is(equalToIgnoringCase("abcd")));
        assertThat("",isEmptyOrNullString());

        assertThat(null,is(nullValue()));
        assertThat(2,is(notNullValue()));
        assertThat(2,greaterThan(1));
        assertThat(2.01,closeTo(2,0.01));

        assertThat("xyz",is(anything()));
    }
}

  

public class ObjectShowcase {
    @Test
    public void test(){
        Person my=new Person("341024","ZhangKe",32);

        assertThat(my,instanceOf(Person.class));
        assertThat(my,not(sameInstance(new Person("341024"))));
        assertThat(my,hasToString(equalTo("341024")));
        assertThat(my,hasProperty("name"));
    }

    class Person{
        private String idCard;
        private String name;
        private int age;

        public Person(String idCard) {
            this.idCard = idCard;
        }

        public Person(String idCard, String name, int age) {
            this.idCard = idCard;
            this.name = name;
            this.age = age;
        }

        public String getIdCard() {
            return idCard;
        }

        public String getName() {
            return name;
        }

        public int getAge() {
            return age;
        }

        @Override
        public String toString() {
            return idCard;
        }

        @Override
        public boolean equals(Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;

            Person person = (Person) o;

            if (!idCard.equals(person.idCard)) return false;

            return true;
        }

        @Override
        public int hashCode() {
            return idCard.hashCode();
        }
    }
}

  

public class CombineShowcase {
    @Test
    public void test(){
        //in both/either must have the same type
        assertThat("result", both(containsString("r")).and(containsString("u")));
        assertThat("result",either(startsWith("x")).or(containsString("r")));

        assertThat("result",allOf(notNullValue(),containsString("s")));
        assertThat("result",anyOf(notNullValue(),isEmptyString()));
    }
}

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM