assertj斷言機制記錄

LyraQA發表於2016-11-18

assertj斷言機制記錄

據說Junit自帶org.junit.Assert斷言包功能不夠完善,assertj功能更強大,在官網

http://joel-costigliola.github.io/assertj/

和一些部落格上進行學習、記錄如下。

在IntelliJ IDEA中使用maven來下載assertj的jar包

    <dependency>
        <groupId>org.assertj</groupId>
        <artifactId>assertj-core</artifactId>
        <!-- use x.x.x for Java 7 projects -->
        <version>x.x.x</version>
        <!-- <version>x.x.x</version> -->
        <scope>test</scope>
    </dependency>

//匯入asserthat所有方法  
import static org.assertj.core.api.Assertions.*;

assertThat(a).as("錯誤描述").method(b)

a 是實際結果,b是預期結果。實際結果符合預期結果的方法method則測試通過,否則報錯輸出“錯誤描述”。

斷言所用list

list.add("test1");
list.add("test2");
list.add("test3");
list.add("test3");


listtest.add("test1");
listtest.add("test2");
listtest.add("test3");

字串處理

assertThat("test1").isEqualTo("test1");
assertThat("test1").isSameAs("test1");
assertThat("test1").isNotEqualTo("test2");

assertThat("frodo").startsWith("fro")
        .endsWith("do")
        .isEqualToIgnoringCase("Frodo");  //正確,忽略大小寫

// 斷言包含字串 不包含字串
assertThat("Frodo").contains("rod").doesNotContain("fro");  //正確,會識別大小寫
// 斷言字串只出現過一次
assertThat("Frododo").containsOnlyOnce("do"); // 錯誤栗子

//判斷正則匹配
assertThat("Frodo").matches("..o.o")  // 一個.代表一個字母
        .doesNotMatch(".*r");//.*表示一串字母,不是以r結尾則測試通過
//.doesNotMatch(".*r.*");//錯誤栗子,含有字母r則不通過

list包含斷言

assertThat(list).hasSize(4)
        .contains("test1", "test2")
        .containsOnly("test1", "test2", "test3")
        .containsExactly("test1", "test2", "test3", "test3")
        .containsAll(listtest)    //包含listtest中的全部元素
        .doesNotContain("test5");


assertThat(list).isSameAs(listtest);//錯誤栗子,兩個列表所含元素有不一樣的

assertThat(list)
 .containsOnlyOnce("test3");//錯誤栗子,因為test3出現2次

數字斷言

Integer num1 = null;
Integer num2 =30;
// 斷言空
assertThat(num1).isNull();
// 斷言非空
assertThat(num2).isNotNull();
// 斷言相等
assertThat(num2).isEqualTo(30);
// 斷言大於 大於等於
assertThat(num2).isGreaterThan(18)
        .isGreaterThanOrEqualTo(18);
// 斷言小於 小於等於
assertThat(num2).isLessThan(38)
        .isLessThanOrEqualTo(38);
// 斷言0
assertThat(0).isZero();
// 斷言正數 非負數
assertThat(1).isPositive()
        .isNotNegative();
// 斷言負數 非正數
assertThat(-1).isNegative()
        .isNotPositive();
// 斷言區間
assertThat(0.8).isStrictlyBetween(0.0,1.0);

相關文章