19
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

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

Last updated at Posted at 2022-03-24

はじめに

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));
}
19
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?