說在前頭,在前面談到的都是Hard Assertions硬斷言
What???什麼是硬斷言???
所謂的硬斷言就是當一個斷言發生錯誤的時候,會直接亮紅燈並拋出錯誤資訊,不會再執行下一個斷言,
這裡建立一個範例,在testHardAssertion方法中,我們建立了兩個會拋出錯誤的斷言
package com.rebuilding.day4;
import org.junit.Test;
import static org.assertj.core.api.Assertions.assertThat;
public class HardAssertions {
@Test
public void testHardAssertion() {
int actual1 = 5;
String actual2 = "10";
assertThat(actual1).isLessThan(4);
assertThat(actual2).isEqualTo("11");
}
}
test run執行結果如下:
我們會發現執行到assertThat(actual1).isLessThan(4)
就拋出錯誤訊息,且不往下執行,這就是硬斷言。
這裡要在提到另一個編寫測試的大原則,一個測試案例只測一件事
先從反面來說,當我們一個測試案例試圖驗證太多事情,會產生幾個問題
從正面來看的話,一個測試案例只測一件事為我們帶來的優點:簡單明瞭的測試案例命名,可以立即得知錯誤的原因,並且易於維護。
既使我們要使用軟斷言來做多個斷言驗證,也不會脫離這個原則
有時候我們需要驗證一個具有狀態的物件,通常要驗證它的時候會需要多個斷言,但如果用硬斷言的方式,會讓我們沒辦法一次收集完所有資訊,並且浪費時間在重新執行測試案例上。
所以這裡要介紹軟斷言,它是有以下三個規則的斷言:
以上,我們可以透過AssertJ的org.assertj.core.api.SoftAssertions來達成
package com.rebuilding.day4;
import org.assertj.core.api.SoftAssertions;
import org.junit.Test;
public class SoftAssert {
@Test
public void testHardAssertion() {
int actual1 = 5;
String actual2 = "10";
SoftAssertions softAssertions = new SoftAssertions();
}
}
package com.rebuilding.day4;
import org.assertj.core.api.SoftAssertions;
import org.junit.Test;
public class SoftAssert {
@Test
public void testHardAssertion() {
int actual1 = 5;
String actual2 = "10";
SoftAssertions softAssertions = new SoftAssertions();
softAssertions.assertThat(actual1).isLessThan(4);
softAssertions.assertThat(actual2).isEqualTo("11");
}
}
package com.rebuilding.day4;
import org.assertj.core.api.SoftAssertions;
import org.junit.Test;
public class SoftAssert {
@Test
public void testHardAssertion() {
int actual1 = 5;
String actual2 = "10";
SoftAssertions softAssertions = new SoftAssertions();
softAssertions.assertThat(actual1).isLessThan(4);
softAssertions.assertThat(actual2).isEqualTo("11");
softAssertions.assertAll();
}
}
可以看到軟斷言幫我們收集了所有的錯誤,讓我們不用反覆重新執行測試來得知所有的訊息。
當我們寫測試的時候,我們必須遵守這樣的原則:
但使用軟斷言:
所以一般情況下是不使用的好...
最後總結,使我覺得似乎講了一集廢話,不過有些思路是需要從中反覆驗證的。
以上。