Table of Contents
ToggleTesting with AssertJ LocalDateTime in Java
提供驗證日期時間條件判斷等方法,編寫的測試程式使用流暢的斷言語句,通常與 JUnit 測試一起使用, AssertJ 斷言的基本方法是 assertThat 方法,使用 Testing Java AssertJ LocalDateTime 流式斷言,本篇增加了範例,並透過單元測試來驗證產出結果。
檔案目錄
./
+- src
+- test
| +- org
| +- ruoxue
| +- spring_boot_168
| +- test
| +- assertj
| +- localdatetime
| +- TestingAssertJLocalDateTimeTest.java
單元測試
Java AssertJ LocalDateTime Testing 斷言日期時間的主要目的是取得日期時間以進行斷言。
isBefore
驗證日期時間是否在指定日期時間之前,若不成立,則會拋出 AssertionError 。
@Test
public void isBefore() {
LocalDateTime value = LocalDateTime.of(2023, 10, 31, 5, 6, 7);
System.out.println(value);
assertThat(value).isBefore(LocalDateTime.of(2023, 10, 31, 5, 6, 12));
assertThat(value).isBefore(LocalDateTime.of(2023, 10, 31, 5, 7, 7));
}
2023-10-31T05:06:07
isBeforeOrEqualTo
Java AssertJ LocalDateTime Testing 驗證日期時間是否在指定日期時間之前或相等,若不成立,則會拋出 AssertionError 。
@Test
public void isBeforeOrEqualTo() {
LocalDateTime value = LocalDateTime.of(2023, 10, 31, 5, 6, 7);
System.out.println(value);
assertThat(value).isBeforeOrEqualTo(LocalDateTime.of(2023, 10, 31, 5, 6, 12));
assertThat(value).isBeforeOrEqualTo(LocalDateTime.of(2023, 10, 31, 5, 6, 7));
}
2023-10-31T05:06:07
isAfter
Java AssertJ LocalDateTime Testing 驗證日期時間是否在指定日期時間之後,若不成立,則會拋出 AssertionError 。
@Test
public void isAfter() {
LocalDateTime value = LocalDateTime.of(2023, 10, 31, 5, 6, 7);
System.out.println(value);
assertThat(value).isAfter(LocalDateTime.of(2023, 10, 31, 5, 6, 2));
assertThat(value).isAfter(LocalDateTime.of(2023, 10, 31, 5, 5, 7));
}
2023-10-31T05:06:07
isAfterOrEqualTo
Java AssertJ LocalDateTime Testing 驗證日期時間是否在指定日期時間之後或相等,若不成立,則會拋出 AssertionError 。
@Test
public void isAfterOrEqualTo() {
LocalDateTime value = LocalDateTime.of(2023, 10, 31, 5, 6, 7);
System.out.println(value);
assertThat(value).isAfterOrEqualTo(LocalDateTime.of(2023, 10, 31, 5, 6, 2));
assertThat(value).isAfterOrEqualTo(LocalDateTime.of(2023, 10, 31, 5, 6, 7));
}
2023-10-31T05:06:07
isBetween
Java AssertJ LocalDateTime Testing 驗證日期時間是否指定日期時間之間,包含起始值跟結束值,若不成立,則會拋出 AssertionError 。
@Test
public void isBetween() {
LocalDateTime value = LocalDateTime.of(2023, 10, 31, 5, 6, 7);
System.out.println(value);
assertThat(value).isBetween(LocalDateTime.of(2023, 10, 31, 5, 6, 2), LocalDateTime.of(2023, 10, 31, 5, 6, 12));
assertThat(value).isBetween(LocalDateTime.of(2023, 10, 31, 5, 6, 7), LocalDateTime.of(2023, 10, 31, 6, 6, 7));
}
2023-10-31T05:06:07
isStrictlyBetween
Java AssertJ LocalDateTime Testing 驗證日期時間是否指定日期時間之間,不包含起始值跟結束值,若不成立,則會拋出 AssertionError 。
@Test
public void isStrictlyBetween() {
LocalDateTime value = LocalDateTime.of(2023, 10, 31, 5, 6, 7);
System.out.println(value);
assertThat(value).isStrictlyBetween(LocalDateTime.of(2023, 10, 31, 5, 6, 2), LocalDateTime.of(2023, 10, 31, 5, 6, 12));
assertThat(value).isStrictlyBetween(LocalDateTime.of(2023, 10, 31, 5, 6, 6), LocalDateTime.of(2023, 10, 31, 6, 6, 7));
}
2023-10-31T05:06:07
usingDefaultComparator
Java Testing AssertJ LocalDateTime 使用預設比較器,驗證日期時間是否符合條件判斷,若不成立,則會拋出 AssertionError 。
@Test
public void usingDefaultComparator() {
LocalDateTime value = LocalDateTime.of(2023, 10, 31, 5, 6, 7);
System.out.println(value);
assertThat(value).usingDefaultComparator().isEqualTo(LocalDateTime.of(2023, 10, 31, 5, 6, 7));
value = LocalDateTime.parse("2023-10-31T05:06:07");
assertThat(value).usingDefaultComparator().isEqualTo(LocalDateTime.of(2023, 10, 31, 5, 6, 7));
}
2023-10-31T05:06:07
usingComparator
Java Testing AssertJ LocalDateTime 使用自定義比較器,驗證日期時間是否符合條件判斷,若不成立,則會拋出 AssertionError 。
@Test
public void usingComparator() {
LocalDateTime value = LocalDateTime.of(2023, 10, 31, 5, 6, 7);
System.out.println(value);
Comparator<LocalDateTime> ignoreTime = (l1, l2) -> l1.toLocalDate().compareTo(l2.toLocalDate());
assertThat(value).usingComparator(ignoreTime).isEqualTo(LocalDateTime.of(2023, 10, 31, 0, 0, 0));
value = LocalDateTime.parse("2023-10-31T05:06:07");
assertThat(value).usingComparator(ignoreTime).isEqualTo(LocalDateTime.of(2023, 10, 31, 0, 0, 0));
}
2023-10-31T05:06:07
usingComparatorWithDescription
Java Testing AssertJ LocalDateTime 使用自定義比較器及描述,驗證日期時間是否符合條件判斷,顯示自定義訊息。
@Test
public void usingComparatorWithDescription() {
LocalDateTime value = LocalDateTime.of(2023, 10, 31, 5, 6, 7);
System.out.println(value);
Comparator<LocalDateTime> ignoreTime = (l1, l2) -> l1.toLocalDate().compareTo(l2.toLocalDate());
assertThat(value).usingComparator(ignoreTime, "ignoreTime")
.isEqualTo(LocalDateTime.of(2023, 10, 31, 0, 0, 0));
value = LocalDateTime.parse("2023-10-31T05:06:07");
assertThat(value).usingComparator(ignoreTime, "ignoreTime")
.isEqualTo(LocalDateTime.of(2023, 10, 31, 0, 0, 0));
}
2023-10-31T05:06:07
TestingAssertJLocalDateTimeTest.java
Java Testing AssertJ LocalDateTime 新增單元測試,驗證是否符合預期。
package org.ruoxue.spring_boot_168.test.assertj.localdatetime;
import static org.assertj.core.api.Assertions.assertThat;
import java.time.LocalDateTime;
import java.util.Comparator;
import org.junit.jupiter.api.Test;
public class TestingAssertJLocalDateTimeTest {
@Test
public void isBefore() {
LocalDateTime value = LocalDateTime.of(2023, 10, 31, 5, 6, 7);
System.out.println(value);
assertThat(value).isBefore(LocalDateTime.of(2023, 10, 31, 5, 6, 12));
assertThat(value).isBefore(LocalDateTime.of(2023, 10, 31, 5, 7, 7));
}
@Test
public void isBeforeOrEqualTo() {
LocalDateTime value = LocalDateTime.of(2023, 10, 31, 5, 6, 7);
System.out.println(value);
assertThat(value).isBeforeOrEqualTo(LocalDateTime.of(2023, 10, 31, 5, 6, 12));
assertThat(value).isBeforeOrEqualTo(LocalDateTime.of(2023, 10, 31, 5, 6, 7));
}
@Test
public void isAfter() {
LocalDateTime value = LocalDateTime.of(2023, 10, 31, 5, 6, 7);
System.out.println(value);
assertThat(value).isAfter(LocalDateTime.of(2023, 10, 31, 5, 6, 2));
assertThat(value).isAfter(LocalDateTime.of(2023, 10, 31, 5, 5, 7));
}
@Test
public void isAfterOrEqualTo() {
LocalDateTime value = LocalDateTime.of(2023, 10, 31, 5, 6, 7);
System.out.println(value);
assertThat(value).isAfterOrEqualTo(LocalDateTime.of(2023, 10, 31, 5, 6, 2));
assertThat(value).isAfterOrEqualTo(LocalDateTime.of(2023, 10, 31, 5, 6, 7));
}
@Test
public void isBetween() {
LocalDateTime value = LocalDateTime.of(2023, 10, 31, 5, 6, 7);
System.out.println(value);
assertThat(value).isBetween(LocalDateTime.of(2023, 10, 31, 5, 6, 2), LocalDateTime.of(2023, 10, 31, 5, 6, 12));
assertThat(value).isBetween(LocalDateTime.of(2023, 10, 31, 5, 6, 7), LocalDateTime.of(2023, 10, 31, 6, 6, 7));
}
@Test
public void isStrictlyBetween() {
LocalDateTime value = LocalDateTime.of(2023, 10, 31, 5, 6, 7);
System.out.println(value);
assertThat(value).isStrictlyBetween(LocalDateTime.of(2023, 10, 31, 5, 6, 2), LocalDateTime.of(2023, 10, 31, 5, 6, 12));
assertThat(value).isStrictlyBetween(LocalDateTime.of(2023, 10, 31, 5, 6, 6), LocalDateTime.of(2023, 10, 31, 6, 6, 7));
}
@Test
public void usingDefaultComparator() {
LocalDateTime value = LocalDateTime.of(2023, 10, 31, 5, 6, 7);
System.out.println(value);
assertThat(value).usingDefaultComparator().isEqualTo(LocalDateTime.of(2023, 10, 31, 5, 6, 7));
value = LocalDateTime.parse("2023-10-31T05:06:07");
assertThat(value).usingDefaultComparator().isEqualTo(LocalDateTime.of(2023, 10, 31, 5, 6, 7));
}
@Test
public void usingComparator() {
LocalDateTime value = LocalDateTime.of(2023, 10, 31, 5, 6, 7);
System.out.println(value);
Comparator<LocalDateTime> ignoreTime = (l1, l2) -> l1.toLocalDate().compareTo(l2.toLocalDate());
assertThat(value).usingComparator(ignoreTime).isEqualTo(LocalDateTime.of(2023, 10, 31, 0, 0, 0));
value = LocalDateTime.parse("2023-10-31T05:06:07");
assertThat(value).usingComparator(ignoreTime).isEqualTo(LocalDateTime.of(2023, 10, 31, 0, 0, 0));
}
@Test
public void usingComparatorWithDescription() {
LocalDateTime value = LocalDateTime.of(2023, 10, 31, 5, 6, 7);
System.out.println(value);
Comparator<LocalDateTime> ignoreTime = (l1, l2) -> l1.toLocalDate().compareTo(l2.toLocalDate());
assertThat(value).usingComparator(ignoreTime, "ignoreTime")
.isEqualTo(LocalDateTime.of(2023, 10, 31, 0, 0, 0));
value = LocalDateTime.parse("2023-10-31T05:06:07");
assertThat(value).usingComparator(ignoreTime, "ignoreTime")
.isEqualTo(LocalDateTime.of(2023, 10, 31, 0, 0, 0));
}
}
心得分享
AssertJ LocalDateTime Java Testing 除了提供流式判斷,還針對 LocalDateTime 做特殊判斷,在許多測試驗證的場景,讓開發者使用更流暢的驗證,不需要再寫迴圈,善用 Java Testing AssertJ LocalDateTime 將有助於驗證效率的提升。