Table of Contents
ToggleAssertJ Exception Methods
驗證不拋出例外、拋出指定例外等,支援許多豐富的斷言和真正有用的錯誤訊息, 提高了測試程式碼的可讀性,使用 AssertJ Exception Java Methods 流式斷言撰寫測試程式,本篇增加了範例,並透過單元測試來驗證產出結果。
檔案目錄
./
+- src
+- test
| +- org
| +- ruoxue
| +- spring_boot_168
| +- test
| +- assertj
| +- exception
| +- AssertJExceptionMethodsTest.java
單元測試
AssertJ Exception Methods Java 斷言例外的主要目的是取得例外以進行斷言。
noException
驗證是否不拋出例外。
@Test
public void noException() {
assertThatNoException().isThrownBy(() -> {
});
thenNoException().isThrownBy(() -> {
});
assertThatCode(() -> {
}).doesNotThrowAnyException();
thenCode(() -> {
}).doesNotThrowAnyException();
}
exception
AssertJ Exception Methods Java 驗證拋出 Exception 及是否有指定訊息 ,若不成立,則會拋出 AssertionError 。
@Test
public void exception() {
assertThatException().isThrownBy(() -> {
throw new Exception("ex !");
}).withMessage("ex !").withMessage("%s !", "ex").withMessageContaining("ex")
.withStackTraceContaining("Exception").withNoCause();
}
illegalArgumentException
AssertJ Exception Methods in Java 驗證拋出 IllegalArgumentException 及是否有指定訊息 ,若不成立,則會拋出 AssertionError 。
@Test
public void illegalArgumentException() {
assertThatIllegalArgumentException().isThrownBy(() -> {
throw new IllegalArgumentException("illegal !");
}).withMessage("illegal !").withMessage("%s !", "illegal").withMessageContaining("illegal")
.withStackTraceContaining("IllegalArgumentException").withNoCause();
}
illegalStateException
AssertJ Exception Methods in Java 驗證拋出 IllegalStateException 及是否有指定訊息 ,若不成立,則會拋出 AssertionError 。
@Test
public void illegalStateException() {
assertThatIllegalStateException().isThrownBy(() -> {
throw new IllegalStateException("illegal !");
}).withMessage("illegal !").withMessage("%s !", "illegal").withMessageContaining("illegal")
.withStackTraceContaining("IllegalStateException").withNoCause();
}
indexOutOfBoundsException
AssertJ Exception Functions in Java 驗證拋出 IndexOutOfBoundsException 及是否有指定訊息 ,若不成立,則會拋出 AssertionError 。
@Test
public void indexOutOfBoundsException() {
assertThatIndexOutOfBoundsException().isThrownBy(() -> {
throw new IndexOutOfBoundsException("index !");
}).withMessage("index !").withMessage("%s !", "index").withMessageContaining("index")
.withStackTraceContaining("IndexOutOfBoundsException").withNoCause();
}
ioException
AssertJ Exception Functions in Java 驗證拋出 IOException 及是否有指定訊息 ,若不成立,則會拋出 AssertionError 。
@Test
public void ioException() {
assertThatIOException().isThrownBy(() -> {
throw new IOException("io !");
}).withMessage("io !").withMessage("%s !", "io").withMessageContaining("io")
.withStackTraceContaining("IOException").withNoCause();
}
nullPointerException
驗證拋出 RuntimeException 及是否有指定訊息 ,若不成立,則會拋出 AssertionError 。
@Test
public void runtimeException() {
assertThatRuntimeException().isThrownBy(() -> {
throw new RuntimeException("run !");
}).withMessage("run !").withMessage("%s !", "run").withMessageContaining("run")
.withStackTraceContaining("RuntimeException").withNoCause();
}
AssertJExceptionMethodsTest.java
AssertJ Exception Methods in Java 新增單元測試,驗證是否符合預期。
package org.ruoxue.spring_boot_168.test.assertj.exception;
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.*;
import static org.assertj.core.api.BDDAssertions.thenCode;
import static org.assertj.core.api.BDDAssertions.thenNoException;
import java.io.IOException;
public class AssertJExceptionMethodsTest {
@Test
public void noException() {
assertThatNoException().isThrownBy(() -> {
});
thenNoException().isThrownBy(() -> {
});
assertThatCode(() -> {
}).doesNotThrowAnyException();
thenCode(() -> {
}).doesNotThrowAnyException();
}
@Test
public void exception() {
assertThatException().isThrownBy(() -> {
throw new Exception("ex !");
}).withMessage("ex !").withMessage("%s !", "ex").withMessageContaining("ex")
.withStackTraceContaining("Exception").withNoCause();
}
@Test
public void illegalArgumentException() {
assertThatIllegalArgumentException().isThrownBy(() -> {
throw new IllegalArgumentException("illegal !");
}).withMessage("illegal !").withMessage("%s !", "illegal").withMessageContaining("illegal")
.withStackTraceContaining("IllegalArgumentException").withNoCause();
}
@Test
public void illegalStateException() {
assertThatIllegalStateException().isThrownBy(() -> {
throw new IllegalStateException("illegal !");
}).withMessage("illegal !").withMessage("%s !", "illegal").withMessageContaining("illegal")
.withStackTraceContaining("IllegalStateException").withNoCause();
}
@Test
public void indexOutOfBoundsException() {
assertThatIndexOutOfBoundsException().isThrownBy(() -> {
throw new IndexOutOfBoundsException("index !");
}).withMessage("index !").withMessage("%s !", "index").withMessageContaining("index")
.withStackTraceContaining("IndexOutOfBoundsException").withNoCause();
}
@Test
public void ioException() {
assertThatIOException().isThrownBy(() -> {
throw new IOException("io !");
}).withMessage("io !").withMessage("%s !", "io").withMessageContaining("io")
.withStackTraceContaining("IOException").withNoCause();
}
@Test
public void nullPointerException() {
assertThatNullPointerException().isThrownBy(() -> {
throw new NullPointerException("null !");
}).withMessage("null !").withMessage("%s !", "null").withMessageContaining("null")
.withStackTraceContaining("NullPointerException").withNoCause();
}
@Test
public void runtimeException() {
assertThatRuntimeException().isThrownBy(() -> {
throw new RuntimeException("run !");
}).withMessage("run !").withMessage("%s !", "run").withMessageContaining("run")
.withStackTraceContaining("RuntimeException").withNoCause();
}
}
心得分享
AssertJ Exception Functions in Java 為用 Java 編寫的測試程式提供了流暢的斷言語句,這些斷言語句通常與 JUnit 測試一起使用, AssertJ 斷言的基本方法是 assertThat 方法,善用 AssertJ Exception Methods in Java 將有助於驗證效率的提升。