Table of Contents
ToggleTesting with AssertJ List in Java
除了提供流式判斷,還針對 List 做特殊判斷,在許多測試驗證的場景,讓開發者使用更流暢的驗證,不需要再寫迴圈,使用 Testing Java AssertJ List 流式斷言,本篇增加了範例,並透過單元測試來驗證產出結果。
檔案目錄
+- src
+- test
| +- org
| +- ruoxue
| +- spring_boot_168
| +- test
| +- assertj
| +- list
| +- TestingAssertJListTest.java
單元測試
Java AssertJ List Testing 斷言集合的主要目的是取得集合的正確元素以進行斷言。
are
驗證元素是否符合條件判斷,若不成立,則會拋出 AssertionError 。
@Test
public void are() {
List<String> list = Arrays.asList("Apple", "Banana", "Cherry");
System.out.println(list);
Condition<String> length = new Condition<String>(s -> s.length() > 4, "length");
assertThat(list).are(length);
List<Integer> intList = Stream.of(6, 7, 8, 9, 10).collect(Collectors.toList());
System.out.println(intList);
Condition<Integer> intValue = new Condition<Integer>(i -> i > 0, "value");
assertThat(intList).are(intValue);
}
[Apple, Banana, Cherry]
[6, 7, 8, 9, 10]
areAtLeast
Java AssertJ List Testing 驗證元素是否符合條件判斷,最少滿足幾個,若不成立,則會拋出 AssertionError 。
@Test
public void areAtLeast() {
List<String> list = Arrays.asList("Apple", "Banana", "Cherry");
System.out.println(list);
Condition<String> length = new Condition<String>(s -> s.length() > 5, "length");
assertThat(list).areAtLeast(2, length);
List<Integer> intList = Stream.of(6, 7, 8, 9, 10).collect(Collectors.toList());
System.out.println(intList);
Condition<Integer> intValue = new Condition<Integer>(i -> i > 1, "value");
assertThat(intList).areAtLeast(2, intValue);
}
[Apple, Banana, Cherry]
[6, 7, 8, 9, 10]
areAtLeastOne
Java AssertJ List Testing 驗證元素是否符合條件判斷,最少滿足一個,若不成立,則會拋出 AssertionError 。
@Test
public void areAtLeastOne() {
List<String> list = Arrays.asList("Apple", "Banana", "Cherry");
System.out.println(list);
Condition<String> length = new Condition<String>(s -> s.length() > 5, "length");
assertThat(list).areAtLeastOne(length);
List<Integer> intList = Stream.of(6, 7, 8, 9, 10).collect(Collectors.toList());
System.out.println(intList);
Condition<Integer> intValue = new Condition<Integer>(i -> i > 4, "value");
assertThat(intList).areAtLeastOne(intValue);
}
[Apple, Banana, Cherry]
[6, 7, 8, 9, 10]
areAtMost
Java AssertJ List Testing 驗證元素是否符合條件判斷,最多滿足幾個,若不成立,則會拋出 AssertionError 。
@Test
public void areAtMost() {
List<String> list = Arrays.asList("Apple", "Banana", "Cherry");
System.out.println(list);
Condition<String> length = new Condition<String>(s -> s.length() > 5, "length");
assertThat(list).areAtMost(2, length);
List<Integer> intList = Stream.of(6, 7, 8, 9, 10).collect(Collectors.toList());
System.out.println(intList);
Condition<Integer> intValue = new Condition<Integer>(i -> i > 8, "value");
assertThat(intList).areAtMost(2, intValue);
}
[Apple, Banana, Cherry]
[6, 7, 8, 9, 10]
areExactly
Java Testing AssertJ List 驗證元素是否符合條件判斷,完全滿足幾個,若不成立,則會拋出 AssertionError 。
@Test
public void areExactly() {
List<String> list = Arrays.asList("Apple", "Banana", "Cherry");
System.out.println(list);
Condition<String> length = new Condition<String>(s -> s.length() > 5, "length");
assertThat(list).areExactly(2, length);
List<Integer> intList = Stream.of(6, 7, 8, 9, 10).collect(Collectors.toList());
System.out.println(intList);
Condition<Integer> intValue = new Condition<Integer>(i -> i > 8, "value");
assertThat(intList).areExactly(2, intValue);
}
[Apple, Banana, Cherry]
[6, 7, 8, 9, 10]
areNot
Java Testing AssertJ List 驗證元素不符合條件判斷,若不成立,則會拋出 AssertionError 。
@Test
public void areNot() {
List<String> list = Arrays.asList("Apple", "Banana", "Cherry");
System.out.println(list);
Condition<String> length = new Condition<String>(s -> s.length() > 7, "length");
assertThat(list).areNot(length);
List<Integer> intList = Stream.of(6, 7, 8, 9, 10).collect(Collectors.toList());
System.out.println(intList);
Condition<Integer> intValue = new Condition<Integer>(i -> i > 10, "value");
assertThat(intList).areNot(intValue);
}
[Apple, Banana, Cherry]
[6, 7, 8, 9, 10]
as
Java Testing AssertJ List 設定驗證描述,當驗證失敗時,顯示自定義訊息。
@Test
public void as() {
int expectedSize = 2;
List<String> list = Arrays.asList("Apple", "Banana", "Cherry");
try {
assertThat(list).as("%s's size should be equal to 2", "List").isEqualTo(expectedSize);
} catch (AssertionError e) {
e.printStackTrace();
assertThat(e).hasMessageContaining("size");
}
}
org.opentest4j.AssertionFailedError: [List's size should be equal to 2]
expected: 2
but was: ["Apple", "Banana", "Cherry"]
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at org.ruoxue.spring_boot_168.test.assertj.list.TestingAssertJListTest.as(TestingAssertJListTest.java:99)
asWithSupplier
Java Testing AssertJ List 設定驗證描述,當驗證失敗時,顯示自定義訊息。
@Test
public void asWithSupplier() {
int expectedSize = 2;
List<String> list = Arrays.asList("Apple", "Banana", "Cherry");
String text = "Size expected: [" + expectedSize + "] but was: [" + list.size() + "]";
try {
Supplier<String> desc = () -> text;
assertThat(list).as(desc).hasSize(expectedSize);
} catch (AssertionError e) {
e.printStackTrace();
assertThat(e).hasMessageContaining(text);
}
}
java.lang.AssertionError: [Size expected: [2] but was: [3]]
Expected size: 2 but was: 3 in:
["Apple", "Banana", "Cherry"]
at org.ruoxue.spring_boot_168.test.assertj.list.TestingAssertJListTest.asWithSupplier(TestingAssertJListTest.java:113)
TestingAssertJListTest.java
Java Testing AssertJ List 新增單元測試,驗證是否符合預期。
package org.ruoxue.spring_boot_168.test.assertj.list;
import static org.assertj.core.api.Assertions.assertThat;
import java.util.Arrays;
import java.util.List;
import java.util.function.Supplier;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import org.assertj.core.api.Condition;
import org.junit.jupiter.api.Test;
class TestingAssertJListTest {
@Test
public void are() {
List<String> list = Arrays.asList("Apple", "Banana", "Cherry");
System.out.println(list);
Condition<String> length = new Condition<String>(s -> s.length() > 4, "length");
assertThat(list).are(length);
List<Integer> intList = Stream.of(6, 7, 8, 9, 10).collect(Collectors.toList());
System.out.println(intList);
Condition<Integer> intValue = new Condition<Integer>(i -> i > 0, "value");
assertThat(intList).are(intValue);
}
@Test
public void areAtLeast() {
List<String> list = Arrays.asList("Apple", "Banana", "Cherry");
System.out.println(list);
Condition<String> length = new Condition<String>(s -> s.length() > 5, "length");
assertThat(list).areAtLeast(2, length);
List<Integer> intList = Stream.of(6, 7, 8, 9, 10).collect(Collectors.toList());
System.out.println(intList);
Condition<Integer> intValue = new Condition<Integer>(i -> i > 1, "value");
assertThat(intList).areAtLeast(2, intValue);
}
@Test
public void areAtLeastOne() {
List<String> list = Arrays.asList("Apple", "Banana", "Cherry");
System.out.println(list);
Condition<String> length = new Condition<String>(s -> s.length() > 5, "length");
assertThat(list).areAtLeastOne(length);
List<Integer> intList = Stream.of(6, 7, 8, 9, 10).collect(Collectors.toList());
System.out.println(intList);
Condition<Integer> intValue = new Condition<Integer>(i -> i > 4, "value");
assertThat(intList).areAtLeastOne(intValue);
}
@Test
public void areAtMost() {
List<String> list = Arrays.asList("Apple", "Banana", "Cherry");
System.out.println(list);
Condition<String> length = new Condition<String>(s -> s.length() > 5, "length");
assertThat(list).areAtMost(2, length);
List<Integer> intList = Stream.of(6, 7, 8, 9, 10).collect(Collectors.toList());
System.out.println(intList);
Condition<Integer> intValue = new Condition<Integer>(i -> i > 8, "value");
assertThat(intList).areAtMost(2, intValue);
}
@Test
public void areExactly() {
List<String> list = Arrays.asList("Apple", "Banana", "Cherry");
System.out.println(list);
Condition<String> length = new Condition<String>(s -> s.length() > 5, "length");
assertThat(list).areExactly(2, length);
List<Integer> intList = Stream.of(6, 7, 8, 9, 10).collect(Collectors.toList());
System.out.println(intList);
Condition<Integer> intValue = new Condition<Integer>(i -> i > 8, "value");
assertThat(intList).areExactly(2, intValue);
}
@Test
public void areNot() {
List<String> list = Arrays.asList("Apple", "Banana", "Cherry");
System.out.println(list);
Condition<String> length = new Condition<String>(s -> s.length() > 7, "length");
assertThat(list).areNot(length);
List<Integer> intList = Stream.of(6, 7, 8, 9, 10).collect(Collectors.toList());
System.out.println(intList);
Condition<Integer> intValue = new Condition<Integer>(i -> i > 10, "value");
assertThat(intList).areNot(intValue);
}
@Test
public void as() {
int expectedSize = 2;
List<String> list = Arrays.asList("Apple", "Banana", "Cherry");
try {
assertThat(list).as("%s's size should be equal to 2", "List").isEqualTo(expectedSize);
} catch (AssertionError e) {
e.printStackTrace();
assertThat(e).hasMessageContaining("size");
}
}
@Test
public void asWithSupplier() {
int expectedSize = 2;
List<String> list = Arrays.asList("Apple", "Banana", "Cherry");
String text = "Size expected: [" + expectedSize + "] but was: [" + list.size() + "]";
try {
Supplier<String> desc = () -> text;
assertThat(list).as(desc).hasSize(expectedSize);
} catch (AssertionError e) {
e.printStackTrace();
assertThat(e).hasMessageContaining(text);
}
}
}
心得分享
AssertJ List Java Testing 提供驗證元素條件判斷等方法,編寫的測試程式使用流暢的斷言語句,通常與 JUnit 測試一起使用, AssertJ 斷言的基本方法是 assertThat 方法,善用 Java Testing AssertJ List 將有助於驗證效率的提升。