junit 5の使用


既存のプロジェクトはJunit 4を使用してユニットテストを行っています.
新しいプロジェクトを行う過程でspringboot 2.5にアップグレードし、junit 5に自然に触れる機会です.だから始まる前に、基本的に知っておくべきことを記録したいです.

n/a.ターゲット

  • TDDの簡単な理解
  • junitは
  • です
  • Junit5 vs Junit4
  • junit 5基本文法
  • TDDとは?



    テストドライバ開発(TDD)というのは、開発者なら何度も聞いたことがあるはずです.
    「テスト主導設計」は、まずテストを作成し、テストに合格するためにコードを記述し、実際にサービスするコードを記述する開発方法です.
    その利点は,オブジェクト向けのコードを開発でき,設計修正とデバッグ時間を短縮し,メンテナンスが容易で,過剰なエンジニアリングを回避できることである.
    欠点は開発時間が増え、困難である.
    私も新入社員からTDDを導入し、TDD大会に参加するなど3年間TDD方式で開発してきたと思いますが、今のところまだ難しいのではないでしょうか.このような悩みが多い.😭
    (スケジュールが迫っている時もたくさん飛び越えます…)
    とにかく.
    TDDのために、もう一つ(?)JUnitは、フェーズまたはユニットテストの一部を容易に記述できるフレームワークを提供します.

    JUnitって何?


    前述したように、ユニットテストのテストフレームワークをサポートします.
    正確にはjava言語をサポートするフレームワークはjunitであり、このテストフレームワークはxUnitと総称される.
    C面Cunit、PythonはPyUnitなど...複数の言語をサポートするフレームワークが存在します!
  • 文を用いて実行結果
  • を判断する.
    簡潔な
  • Annotation(@).(junit 4から)
  • JUnit4 vs JUnit5


    junit 4とjunit 5には多くの違いがあります.
    1.構成が異なる.
    JUnit 4のような場合は、Allin Oneというライブラリを追加するだけです.
    これに対して、JUnit 5は3つのモジュールに分かれています.
    JUnit 5 = JUnit Platform + JUnit Jupiter + JUnit Vintage
    
    各モジュールパッケージの説明は多くのブログでよく整理されています.
    2.Javaバージョンのサポート
  • JUnit 4はjava 4以降の
  • です.
  • JUnit 5はjava 8以降の
  • です.
    3.Spring Boot内蔵バージョン
  • JUnit 4 SpringBoot 2.1版
  • JUnit 5はSpringBoot 2.2以降のバージョンで提供されています.
    したがって、2.2以降は、他の設定は必要なく、デフォルトstart-testを使用して依存性を追加するだけです.
  • 4.言語の違い
    たとえば、JUnit 4がテスト前に実行したメソッドを@Beforeと定義した場合、JUnit 5は@BeforeEachと定義されます.
    このように既存のJUnit 4で使用されている複数の言語とは異なる.
    違う点も親切に他のブログを参考にすることができます.
    この文章には違いがあるでしょう.目標は学習と応用程度、以下のJUnit 5でよく使われる、変化する語彙です!

    JUnit 5基本文法


    @ExtendWith(MockitoExtension.class)
    mokitoの使用に使用します.(JUnit 4の@RunWith(SpringRunner.class)と同じ).
    Junit 5はより強力な拡張言語ExtendWithを使用し始めた.
    それ以外に、JUnit 4が@SrpingBootTestを使用して統合テストを行う場合、@RunWith(SpringRunner.class)を追加する必要がありますが、JUnit 5はすでに@SpringBootTestにあり、追加する必要はありません.
    @Test
    JUnit 5は基本的に「no access modifier」をPublicと見なし、非公開でテストケースを定義できるようにしている.
    @BeforeEach/@AfterEach
    各試験方法を実行する前/後に実行します.
    5つのテストがある場合、各テスト・インスタンスは、各構文を持つメソッドを5回実行します.
    @BeforeAll/@AfterAll
    テストクラス内のすべてのテストメソッドは、実行前/後に実行されます.
    Eachとは異なり、テストクラスごとに1回実行されます.
    @Disabled
    JUnit 4の@Ignore.テストケースグロー処理
    @Tag
    JUnit 4の@Category.フィルタをテストします.
    実行するテストを含めるか、そのカテゴリに基づいてフィルタ除外できます.
    @DisplayName
    test runnerに出力する名前を指定できます.
    従って、従来のjunit 4では、メソッド名がテストケース名であり、名前が長くなるという欠点を補い、ハングルでメソッドを記述する際の不快感を低減することができる.
    @ParameterizedTest @ValueSource
    データ変換を伴うメソッドを複数回実行するために使用します.
    @DisplayName("공백 문자열 테스트")
    @ParameterizedTest(name = "문자열 {0}으로 조회")
    @ValueSource(strings = " ", "")
    public void isBlankStringTest(String source) {
      boolean isBlank = service.isBlank(source);
      assertTrue(isBlank);
    }
    Assertion
  • JUnit 4の様々な断言方法をlamdaとともに使用することができる.
  • 	assertAll("assertionGroup1",
     	 () -> assertEquals(expected, actual),
     	 ...    
    	)
  • assertThrows
    発生する異常比較.
  • @Test
        void exceptionTesting() {
            Exception exception = assertThrows(ArithmeticException.class, () ->
                    calculator.divide(1, 0));
    
            assertEquals("/ by zero", exception.getMessage());
        }
    背中が多すぎる.
    以下に紹介するブログが多すぎて、自分でテストケースを作って、整理を続けます!

    注意事項


    現在springはDIを行うための様々な方法の1つ@Autowiredを捨てている.(この部分もブログにまとめておきます)
    ただしJUnit 5で@SpringBootTestを行う場合は@AutowiredでDIを行う必要があります.
    詳細については、次のブログを参照してください.
    https://velog.io/@sdp1123/JUnit5-%EC%83%9D%EC%84%B1%EC%9E%90-%EC%A3%BC%EC%9E%85-%EC%98%A4%EB%A5%98
    https://pinokio0702.tistory.com/189?category=414017

    リファレンス


    https://reflectoring.io/unit-testing-spring-boot/
    https://junit.org/junit5/docs/current/user-guide/
    http://junit.sourceforge.net/javadoc/org/junit/Assert.html
    https://gmlwjd9405.github.io/2018/06/03/agile-tdd.html
    https://nesoy.github.io/articles/2017-02/JUnit
    https://jessyt.tistory.com/86
    https://jade314.tistory.com/entry/Junit-5
    https://do-study.tistory.com/98
    https://donghyeon.dev/junit/2021/04/11/JUnit5-%EC%99%84%EB%B2%BD-%EA%B0%80%EC%9D%B4%EB%93%9C/