テストコード-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
Reference
この問題について(テストコード-junit), 我々は、より多くの情報をここで見つけました https://velog.io/@ttomy/테스트코드-junitテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol