0
1

JUnit5のまとめ(基本的な使い方)

Last updated at Posted at 2024-01-28

JUnit5概要

個人的にはテスティングフレームワークはSpockの方が好みですがJUnitについてもまとめようと思います。
java言語で書くことの出来る単体テストを行うためのテスティングフレームワークです。
Spockとは異なり、javaソースコードとほとんど一緒なのでjavaに触れてきた方はこちらの方が親しみがあり、ラムダ式の判定などもでき、springとの相性も良いみたいです。

JUnit5の基本的なルール

・戻り値はVoid(戻り値なし)とする
・引数は指定しない
JUnitは下記のようにアノテーションベースのテスティングフレームワーク

アノテーション 概要
@Test 付与することでテストメソッドとして機能
@DisplayName テスト実行結果に表示される-結果が分かりやすくなる
@BeforeEach テストメソッドとは別で作成しておくことで、各テストメソッドの実行後に毎回実行される
@AfterEach テストメソッドとは別で作成しておくことで、各テストメソッドの実行前に毎回実行される
@BeforeAll テストメソッドとは別で作成しておくことで、テストクラスの実行前に1度だけ実行される
@AfterAll テストメソッドとは別で作成しておくことで、テストクラスの実行前に1度だけ実行される
@Disabled 付与したテストクラスやテストメソッドを無効化
@ParameterizedTest 付与することでパラメータ化テストが可能
@ValueSource パラメタライズド用のテストメソッド(ひとつの型のみ使用可能)
@MethodSource パラメタライズド用のテストメソッド(複数の型の使用可能)
@CsvSource パラメタライズド用のテストメソッド(独自の型でも使用可能)

参考コードを実際に書いてみる

前提:
下記のDTOクラスの各フィールドが取得できるかテストを行う。
◆DTOクラス

public class dogDto {

        private Long dogId;
        private String DogName;
        private String DogBreed;
    }

◆テストコード

@SpringBootTest
public class dogDaoImplSTest_Select {

    @Autowired
    DogDaoImpl dao;

    static Stream<Arguments> parameterized_method() { //パラメーターを渡すメソッド
        return Stream.of(
                arguments(1L, 1L, "moku", "pomeranian"), //パラメーター1を渡す
                arguments(2L, 2L, "mugi", "pekingese") //パラメーター2を渡す
        );
    }

    @DisplayName("複数件取得") //テスト実行時に表示するテスト名
    @ParameterizedTest //パラメーター化テストに付与
    @MethodSource("parameterized_method")
        //上記のメソッドの呼び出し
        //様々な型を渡すことができる、上記でメソッドを作成する必要がある
    void select_parameterized_dog(Long pDogId, Long eDogId, String eDogName, String EDogBreed) { //メソッド内で渡すための変数宣言
        final DogDtoSelector selector = new DogDtoSelector();
        selector.setDogId(List.of(pDogId));

        final List<DogDto> actual = dao.select(selector); //selectメソッドの実行

        assertEquals(1, actual.size()); //サイズチェック
        assertAll( //各パラメーターのチェック
                () -> assertEquals(eDogId, actual.get(0).getDogId()),
                () -> assertEquals(eDogName, actual.get(0).getDogName()),
                () -> assertEquals(EDogBreed, actual.get(0).getDogBreed())
        );
    }
}

メリット

・javaの記法でそのまま書くことができる
・パラメタライズドテストの際に様々な型で検証を行うことができる
・SpringBootとの親和性が高い

デメリット

・パラメタライズドテストに関してはspockの方がわかりやすい

まとめ

個人的にはSpockの方が好みですが、Spockのパラメタライズドテストを行う際にも、独自の型などを使用していると、別メソッドとして切り出してパラメーターを渡してあげる必要があるのでどっちもどっちといったところかなと思っています。
javaに慣れている方はJUnitの方がわかりやすいかもしれないですね。

0
1
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
0
1