Spring深化班-第3週-1
16551 ワード
2022年4月16日(土)
[スパルタコードクラブ]Spring深化クラス-3週目-1
開発に伴い、バグは不可欠な存在である.そのため、導入前にできるだけ多くのエラーを特定する必要があります.エラーはどこで発生するかもしれないので、最も効果的に検索することが重要です.
テスト要件
エラーが検出された時間に基づいて、コストは指数関数的に増加するため、導入前にできるだけ多くのエラーを検索する必要があります.
テストの種類
ユニットテスト モジュールまたはクラスの詳細なテスト モジュール間でインタラクティブ検証ができない 統合テスト は、2つ以上のモジュールの接続状態 をテストする.モジュール間の接続検証エラー E 2 Eテスト(=ブラックボックステスト) 実際のユーザとほぼ同じ環境で をテストする.
Springのテストフレームワークにより、複数のEdgeエンクロージャを簡単かつ迅速にテストできます.△この方法には多くの利点と欠点があり、状況に応じて使用することができる.
ユニットテスト:プログラムを小さなユニットに分けて、各ユニットが正しく動作しているかどうかを確認し、問題が発生したときにどの部分が間違っているかを迅速かつ正確に決定します.
JUnit使用設定:build.gradleにはJUnitを使用する環境が設定されています.
のテストファイルを作成します. ファイルを右クリック>Generate...>"Test...">デフォルト設定作成 src>test>javaパッケージの下にクラス を作成
簡易試験コード例 実行結果はハングルとして表示されません
->ファイル設定-検索ウィンドウにgrade と入力します.
データを送信する際にクライアントが入力した値を考慮しても,サーバは考慮する必要がある.
ex)商品画像がURL形式でない場合、会員IDがnullまたは「」の場合、商品名はありません...
したがって、データベースに密接に関連するクラスについては、その値を例外として処理します.そうしないと、エラーが発生します(Exceptionを単独で作成すると、ケースによって簡単に区別できます).
のテスト設計では、エラーが発生していないかどうかを確認するためにEdge Caseを設計します.
AS-IS設計→開発→テスト(→設計修正)順 TO-BE設計→テスト(→設計修正)→開発
->関連コンテンツはGoogle(講師が直接試してみることをお勧めし、違いを感じてください) を使用してください
製品サービスユニットのテストにはレポートが必要です. 理想的には、各テストエンクロージャは互いに隔離されている必要があります->偽のオブジェクトが必要
MockService 実際のサービスでは名前のみを使用してMockServiceを作成する MockRepository: 実際のレポートと同じオブジェクト(同じクラス名、同じ関数名) DBオペレーションの入力値と戻り値は同じ(実際のデータベースオペレーションを使用しない) である.
テスト:MockService、MockRepositoryテスト を使用
短所 bean、IoCは使用できません. サービスを変更する場合は、MockService、MockRepositoryを大幅に変更する必要がある .
製作・使用が容易なMockitoは実用性が高い.
[スパルタコードクラブ]Spring深化クラス-3週目-1
◇テスト
開発に伴い、バグは不可欠な存在である.そのため、導入前にできるだけ多くのエラーを特定する必要があります.エラーはどこで発生するかもしれないので、最も効果的に検索することが重要です.
テスト要件
テストの種類
Springのテストフレームワークにより、複数のEdgeエンクロージャを簡単かつ迅速にテストできます.△この方法には多くの利点と欠点があり、状況に応じて使用することができる.
◇JUnitでユニットテスト
ユニットテスト:プログラムを小さなユニットに分けて、各ユニットが正しく動作しているかどうかを確認し、問題が発生したときにどの部分が間違っているかを迅速かつ正確に決定します.
JUnit使用設定:build.gradleにはJUnitを使用する環境が設定されています.
testImplementation 'org.springframework.boot:spring-boot-starter-test'
// Product가 잘 되어있는지 확인
class ProductTest {
@Test // 테스트용 함수에 표기
@DisplayName("정상 케이스") // 테스트 결과 볼 때, 해당 이름으로 표기
void createProduct_Normal() {
// given
Long userId = 100L;
String title = "오리온 꼬북칩 초코츄러스맛 160g";
String image = "https://shopping-phinf.pstatic.net/main_2416122/24161228524.20200915151118.jpg";
String link = "https://search.shopping.naver.com/gate.nhn?id=24161228524";
int lprice = 2350;
ProductRequestDto requestDto = new ProductRequestDto(
title,
image,
link,
lprice
);
// when
Product product = new Product(requestDto, userId);
// then
assertNull(product.getId()); // 빈 값인지 확인
assertEquals(userId, product.getUserId()); // assertEquals(예상값, 실제값)
assertEquals(title, product.getTitle());
assertEquals(image, product.getImage());
assertEquals(link, product.getLink());
assertEquals(lprice, product.getLprice());
assertEquals(0, product.getMyprice());
}
}
->ファイル設定-検索ウィンドウにgrade
◇Edgeエンクロージャに対するユニットテスト
データを送信する際にクライアントが入力した値を考慮しても,サーバは考慮する必要がある.
ex)商品画像がURL形式でない場合、会員IDがnullまたは「」の場合、商品名はありません...
したがって、データベースに密接に関連するクラスについては、その値を例外として処理します.そうしないと、エラーが発生します(Exceptionを単独で作成すると、ケースによって簡単に区別できます).
// 예시
// 입력값 Validation
if (userId == null || userId <= 0) {
throw new IllegalArgumentException("회원 Id 가 유효하지 않습니다.");
}
// key annotation
@Nested // 클래스에서 생성, 하위에 함수를 작성하여 설계
@BeforeEach // 각 Test 전에 해당 행동 실행
// 예시
class ProductTest {
@Nested
@DisplayName("회원이 요청한 관심상품 객체 생성")
class CreateUserProduct {
private Long userId;
private String title;
private String image;
private String link;
private int lprice;
@BeforeEach
void setup() {
userId = 100L;
title = "오리온 꼬북칩 초코츄러스맛 160g";
image = "https://shopping-phinf.pstatic.net/main_2416122/24161228524.20200915151118.jpg";
link = "https://search.shopping.naver.com/gate.nhn?id=24161228524";
lprice = 2350;
}
@Test
@DisplayName("정상 케이스")
void createProduct_Normal() {
// given
ProductRequestDto requestDto = new ProductRequestDto(
title,
image,
link,
lprice
);
// when
Product product = new Product(requestDto, userId);
// then
assertNull(product.getId());
assertEquals(userId, product.getUserId());
assertEquals(title, product.getTitle());
assertEquals(image, product.getImage());
assertEquals(link, product.getLink());
assertEquals(lprice, product.getLprice());
assertEquals(0, product.getMyprice());
}
◎ TDD (Test-Driven Development)
->関連コンテンツはGoogle(講師が直接試してみることをお勧めし、違いを感じてください)
◇直接Mock Object実施によるユニットテスト
短所
製作・使用が容易なMockitoは実用性が高い.
Reference
この問題について(Spring深化班-第3週-1), 我々は、より多くの情報をここで見つけました https://velog.io/@gwichanlee/Spring-심화반-3주차-1テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol