3
Help us understand the problem. What are the problem?

posted at

updated at

Organization

Java: JUnit 例外が発生することを確認するテストの書き方の変遷

はじめに

JUnitでは、バージョンによってテストの書き方が異なります。

この記事では、例外が発生することを確認するテストの書き方を比較します。

JUnit 3

failメソッドが呼ばれるとテストに失敗するという仕様を利用します。

下記のサンプルコードの場合、getメソッド内でIndexOutOfBoundsExceptionが発生した場合は、catch句に入り、failメソッドは呼ばれません。このため、テストに成功するという仕組みになっています。

JUnit 4/5でもこの書き方は可能ですが、後述の書き方のほうが読みやすいでしょう。

public void testOutOfBounds() {
    try {
		List<Object> it = new ArrayList<>();
        it.get(1);
		fail();
	} catch (IndexOutOfBoundsException e) {
	}
}

JUnit 4

@Test アノテーションのexpected値を利用します。

@Test(expected = IndexOutOfBoundsException.class)
public void testOutOfBounds() {
	List<Object> it = new ArrayList<>();
	it.get(1);
}

JUnit 5

Assertions#assertThrowsを利用します。

JUnitの各assertメソッドでは、staticインポートを利用して、クラス名を省略するケースが多いです。

import static org.junit.jupiter.api.Assertions.assertThrows;

@Test
void testOutOfBounds() {
	List<Object> it = new ArrayList<>();
	assertThrows(IndexOutOfBoundsException.class, () -> it.get(1));
}

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
3
Help us understand the problem. What are the problem?