2022年02月13日に一度に終了するスプリングオーバーを選択します.販売格差パッケージオンライン.
5038 ワード
テストメソッド
講師は私たちに実際の仕事でのテストスキルと経験を話してくれた.
テストの基礎を作る
クラスまたはメソッドは、単一の責任原則(SRP)を遵守し、適切なサイズでなければなりません.
適切なパッケージによる分離
必ずうまく動くとは思わないで、コード量を丁寧にテスト&中断しないでください.
テストコードの改善に努める
Junit、Mockito説明
Junit
純粋にJavaのUnitテストフレームワークです.
testImplementation 'org.springframework.boot:spring-boot-starter-test'
この中にはジェニート5もいます!
一般的なテスト構造
@Test
public void testSomething(){
String result ="hello"+"world!";
assertEquals("hello world!",result);
}
org.junit.jupiter.api.Assertions.*JUnitで最も一般的な検証ツールの1つ
assertEquals(推定値、実績値);この形で使います.
@SpringBootTestプレゼンテーションを追加し、JunitにSpringに空のサービスとして簡単に登録できます.
@SpringBootTest
アプリケーションを直接解放するようなテストでは、基本的にすべての空きが解放され、実際の実行環境が作成され、テスト環境の構築に役立ちます.
基本的には統合テストです.
動作をすると、設定したアプリケーションが動作し、テストを実行します.
結果画面
テストコードの作成
@SpringBootTest
class DMarkerServiceTest {
@Autowired
private DMarkerService dMarkerService;
@Test
public void testSomething() {
dMarkerService.createDeveloper(CreateDeveloper.Request.builder()
.developerLevel(DeveloperLevel.SENIOR)
.developerSkillType(DeveloperSkillType.FRONT_END)
.experienceYears(12)
.memberId("memberId")
.name("name")
.age(32)
.build());
List<DeveloperDto> allEmployedDevelopers = dMarkerService.getAllEmployedDevelopers();
System.out.println(allEmployedDevelopers);
}
}
このようにすると、隔離性が悪く、データベースにデータがあるとテストができないなどの問題があります.
->解決策は隔離性を高める方法Mockingです.
Mockito
隔離性の向上
@SpringBootTestプレゼンテーションを削除します.
@ExtendWith(Mockito Extension.class)を追加します.
Mockito Test
@Autowiredの代わりに@InjectMocksを使用
@InjectMocksは偽物をDMakerServiceに導入します.
DmakerServiceには2つの依存項目があります.@Mockとして追加します.
@Mock
private DeveloperRepository developerRepository;
@Mock
private RetiredDeveloperRepository retiredDeveloperRepository;
これにより、テストに2つのrepositoryが登録され、@InjectMockを使用してクラスを作成するときに自動的に2つのMockが追加されます. given(developerRepository.findByMemberId(anyString()))
.willReturn(Optional.of(Developer.builder()
.developerLevel(DeveloperLevel.SENIOR)
.developerSkillType(DeveloperSkillType.FRONT_END)
.experienceYears(12)
.statusCode(StatusCode.EMPLOYED)
.name("name")
.age(12)
.build()));
findByMemberIdに任意の文字列を追加すると、次の応答をシミュレートできます.完全なコード
@ExtendWith(MockitoExtension.class)
class DMarkerServiceTest {
@Mock
private DeveloperRepository developerRepository;
@Mock
private RetiredDeveloperRepository retiredDeveloperRepository;
@InjectMocks
private DMarkerService dMarkerService;
@Test
public void testSomething() {
given(developerRepository.findByMemberId(anyString()))
.willReturn(Optional.of(Developer.builder()
.developerLevel(SENIOR)
.developerSkillType(FRONT_END)
.experienceYears(12)
.statusCode(StatusCode.EMPLOYED)
.name("name")
.age(12)
.build()));
DeveloperDetailDto developerDetail = dMarkerService.getDeveloperDetail("memberId");
assertEquals(SENIOR,developerDetail.getDeveloperLevel());
assertEquals(FRONT_END,developerDetail.getDeveloperSkillType());
assertEquals(12,developerDetail.getExperienceYears());
}
}
実行結果
成功時
失敗した場合
Reference
この問題について(2022年02月13日に一度に終了するスプリングオーバーを選択します.販売格差パッケージオンライン.), 我々は、より多くの情報をここで見つけました https://velog.io/@dolljang/20220212-한-번에-끝내는-Spring-완.전.판-초격차-패키지-Onlineテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol