JUnitを触り始めたとき、最初にしんどかったのは文法そのものよりも、「このテストは何を確かめているんやろう」と読み取るところでした。

特に文系出身でコードに慣れる前の段階だと、実装コードよりテストコードの方が急に抽象的に見えて、そこで止まりやすい気がします。

この記事では、文系出身エンジニアとしてJUnitで最初に詰まりやすいポイントを3つに絞って整理します。最初に全部覚える前提ではなく、「ここが分かると次へ進みやすい」という観点でまとめます。

結論

JUnitで最初に詰まりやすいのは、アサーションの書き方そのものよりも、何を確認するテストなのか整理できていないことが多いです。

最初は次の3つを分けて考えるだけでもかなり読みやすくなります。

  1. 戻り値や計算結果を確認したいのか
  2. 例外が発生することを確認したいのか
  3. 複数の条件をまとめて確認したいのか

この整理ができると、assertEqualsだけに頼らず、assertThrowsassertAllを自然に使い分けやすくなります。

詰まりポイント1: 何を確認しているテストか分からない

最初の壁は、テストコードを読んだときに「成功なら何がうれしいテストなのか」が見えないことでした。

たとえば次のようなコードは、文法だけ見れば難しくありません。でも、何を確認したいかを先に言葉にできないと、ただの記号の並びに見えやすいです。

@Test
void priceWithTaxを計算できる() {
    int result = calculator.priceWithTax(1000);
    assertEquals(1100, result);
}

このテストが確認しているのは、「税込み価格の計算結果が1100になること」です。まずは、assertEqualsを覚えるより前に、このテストは戻り値を確認していると読めるようになる方が大事です。

逆に言うと、戻り値を確認するテストならassertEqualsは普通に有効です。問題は、どの場面でもそれだけで済ませようとしてしまうことです。

詰まりポイント2: 例外テストの読み方が分からない

次に止まりやすいのが、異常系のテストです。特に「この入力なら失敗してほしい」という場面では、戻り値ではなく例外を確認します。

@Test
void nullのとき例外になる() {
    assertThrows(IllegalArgumentException.class, () -> service.register(null));
}

ここで見ているのは、「戻り値がどうなったか」ではなく、「不正な入力に対して想定どおり例外が発生するか」です。

文系出身だと、最初はラムダ式やメソッド参照の見た目で身構えやすいかもしれません。ただ、最初の理解としては、assertThrows失敗してほしい処理を包んで、その例外型を確認するものと押さえれば十分です。

詰まりポイント3: どこまで1つのテストに書いてよいか迷う

もう1つよく詰まるのが、「この確認も入れたい、あの確認も入れたい」と増やしていくうちに、テストの意図がぼやけることです。

そんなときは、関連する複数条件をまとめて確認するためにassertAllを使うと整理しやすくなります。

@Test
void customerの内容をまとめて確認する() {
    Customer customer = service.findById(1L);

    assertAll(
        () -> assertEquals(1L, customer.getId()),
        () -> assertEquals("Yamada", customer.getName()),
        () -> assertEquals("yamada@example.com", customer.getEmail())
    );
}

これは「1つのオブジェクトについて、関連する複数の値をまとめて確認している」と読めます。逆に、関係の薄い確認を1つのテストへ詰め込みすぎると、失敗時にどこが本題だったのか分かりづらくなります。

最初に覚える最小セット

最初から全部覚えようとすると重いので、まずは次の4つくらいで十分です。

使いどころ まず覚えるもの
戻り値や計算結果を確認したい assertEquals
例外が発生することを確認したい assertThrows
複数条件をまとめて確認したい assertAll
true / false の条件を確認したい assertTrue / assertFalse

この段階では、どの assertion を使うかだけでなく、何を確認するテストなのかを先に言葉にする癖を付けると、テストコードがかなり読みやすくなります。

まとめ

文系出身でJUnitに入るときは、アノテーションやメソッド名の暗記より先に、「このテストは戻り値を見るのか、例外を見るのか、複数条件をまとめて見るのか」を分けて読む方が進みやすいです。

最初から完璧に書こうとしなくてよくて、assertEqualsassertThrowsassertAllあたりの役割がつながってくると、だいぶ怖さが減ると思います。


JUnit 5、Mockito、DBUnit、Spring Bootを使ったテスト実装を体系的に整理したい方向けに、Udemyで講座も作っています。

講座はこちらです。
JUnit 5完全攻略: Javaのテスト実装を基礎から実務レベルまで学ぶ