AssertJ Exception Methods - AssertJ 155

AssertJ Exception Methods – AssertJ 155

AssertJ 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 將有助於驗證效率的提升。

發佈留言