テストコード-junit


なぜテストコードを作成しますか?


なぜテストコードを書くのですか?実際、テストコードを書いたことがない人は、テストコードを書くだけで時間がかかります.開発も忙しいが、テストコードを書く時間がなく、開発に投入する時間が倍に減ったため、臍が大きくなったため、テストコードを書くことができなかった.テストコードを記述する理由を理解します.

信頼性の高い拡張性


機能を追加した後、追加した機能が他のコードに与える影響を理解する必要があります.テストコードにより,ある部分が不変であることを確信し,開発と非開発は安定性,故障シュートの有用性に大きな違いがある.
従って,プロジェクトの拡大に伴い,一方が蓄積したテストコードはより大きな効率と安定性を有する.

時間短縮(クイックフィードバック)


大きなプロジェクトほど、実際のサーバを実行してdbをテスト、アクセス、Web上の実際の出力を表示するには、多くのコストと時間がかかります.
コードをテストすることで、ドゥルーベルの値をより速く、より簡単に表示できます.

手動テストよりも信頼性が高い(自動検証)


実際、プログラムの確認結果を振り返る過程で、人間としてミスを犯すのは避けられない.テストコードを使用する場合は、追加できます.

テストコードは、ドキュメントの役割を果たすことができます。


テストコード自体は、コラボレーション開発者にコードを説明する役割を果たすことができます.どの入力値を考慮したかを示すプロンプトが表示されます.

テストコードの作成(java、springboot)


JUnitって何?


JAvaの代表的なテストフレームワーク、ユニットテストツール.
スプリングイニシャルタイプライターを使用すると、依存性として自動的に登録されます.

テストコードの生成


classの内側を選択しctrl+shift+tを入力すると、テストを生成するオプションが表示されます.

classnameと作成するメソッドを選択してOKをクリックすると、Testディレクトリで選択したclassと同じ場所でテストコードクラスが生成されます.
  • メソッドが選択されていない場合は、デフォルトで生成されます.
  • 良好な単位テストの属性(FIRST)


    しかし,テストコードを勝手に記述することは,テストが有意義であることを意味するものではない.例外のテストコード、異なる結果を生み出すテストコード、およびコードケースを上書きできないテストコード.
    これは時間を浪費するだけでなく、開発に有害だという誤った確信を生む.
    したがって,良好なユニットテストコードの要件を理解する必要がある.

    FIRST


    迅速、孤立、リカバリ可能、自己検証、
    Timelyの前の文字に基づいてFIRSTと命名する原則がある.
    これを無視したテストコードの例を見てみましょう.
    @SpringBootTest
    class ArticleServiceTest {
        @Autowired
        private ArticleService articleService;
        @Autowired
        private ArticleRepository articleRepository;
        
        @Test
        void article_저장(){
            String testTitle="test update....";
            ArticleRequestDto testArticleDto=ArticleRequestDto.builder()
            						.title(testTitle).contents("testtest....123")
                                    .contentsHtml("<p>testtest....123</p>")
                                    .contentsMd("testtest....123").build();
          	Article article=new Article(testArticleDto);
        	Article saved=articleRepository.save(article);
            System.out.println(article.getTitle());
            System.out.println(articleService.findById(saved.getId()).getTitle());
       
    
        }
    
    }
    上のテストに問題があります.

  • Fast
    ユニットテストはできるだけ迅速に実行する必要があります.テストの実行速度が遅いので、テストしたくないのは良いテストではありません.
    -->上記のコードの@SpringBootTestは、すべての空がIocコンテナに登録され、テストが実行されるため遅くなります.

  • Independent
    これはテストコードを作成する上で最も注意しなければならない部分です.ユニットテストは、他の方法、以前のテスト、対象の状態等に依存してはならない
    すなわち、テストする対象は1つであり、他の要求の影響を受けない必要があります.
    -->以上のコードは、ArticleserviceをテストしながらArticleRepositoryにも依存しているため、どちらがテスト対象かは不明です.サービスがテスト対象の場合は、記事レポートへの依存性を最小限に抑える必要があります.また、以前に同じテストが実行され、同じidの項目が保存されていた場合、テストは失敗します.したがって、Mockやサポート@Transactional、@BeforeEach、@BeforeAllなどの操作も使用できます.

  • Repeatable
    ユニットテストは繰り返し可能であるべきです.
    -->上記のように、テストの実行回数に応じて異なる結果を出すべきではありません.

  • Self-validating
    単位テストは自己検証できるようにしなければならない.
    -->以上が開発者
    出力されたartcleのタイトルを直接見て同じかどうかを判断しますが、これは間違っています.
    成功するかどうかはAssertなどで自分で知る.

  • Timely
    まずユニットテストを作成し、その後製品コードを作成します.これはTDDに適用される原則です.
  • 与えられた-when-thenモード


    守らなければならない原則とは言えませんが、コードの可読性のテストに役立ちます.準備-実行-検証.テストコードを作成し、準備(所与)−実行(when)−検証(then)を表示します.

    コーヒーの価格、予想される割引価格を用意して、
    コーヒーの割引方法を使うと、
    結果をassertで検証します.
    +REFERENCE
    https://dzone.com/articles/writing-your-first-unit-tests
    https://galid1.tistory.com/772
    https://brunch.co.kr/@springboot/292