[ν μ€νΈ] λ¨μν μ€νΈ vs ν΅ν©ν μ€νΈ vs μΈμν μ€νΈ
μννΈμ¨μ΄μ κ°μ₯ μμ λ¨μμΈ κ°λ³ λ©μλλ ν¨μμ κΈ°λ₯μ κ²μ¦νλ ν μ€νΈ
νΉμ κΈ°λ₯μ΄ μ¬λ°λ₯΄κ² λμνλμ§ νμΈνκΈ° μν¨
@Test
void μ±μκΈ°_μ£Όλ§_κ°κ²©_κ³μ°() {
// given
LocalDate peakSeasonWeekend = LocalDate.of(2024, 8, 10); // 8μ ν μμΌ
// when
int price = PriceCalculator.calculate("A-1", peakSeasonWeekend);
// then
assertThat(price).isEqualTo(136000); // 80000 * 1.7
}
- μΈλΆ μμ‘΄μ± μμ
κ°λ³ λͺ¨λλ€μ΄ κ²°ν©λμ΄ μ 체 μμ€ν μ΄ μ¬λ°λ₯΄κ² λμνλμ§ κ²μ¦νλ ν μ€νΈ
λͺ¨λ κ°μ μνΈμμ©μ΄ μ¬λ°λ₯΄κ² λμνλμ§ νμΈνκΈ° μν ν μ€νΈ
// Service + Repository μ°λ κ²μ¦
@SpringBootTest
@Transactional
class ReservationServiceIntegrationTest {
@Test
void μμ½_μ μ₯_ν_μ‘°ν() {
// given
ReservationRequest request = new ReservationRequest(...);
// when
ReservationResponse saved = reservationService.createReservation(request);
ReservationResponse found = reservationService.getReservation(saved.getId());
// then
assertThat(found.getCustomerName()).isEqualTo("νκΈΈλ");
}
}
- μ€μ DB μ¬μ©
- νΈλμμ λ‘€λ°±
- λͺ¨λκ° μ°λ νμΈ
- μ±λ₯ ν μ€νΈ
νλ‘μ νΈμ μ°Έμ¬νλ μ¬λλ€(κΈ°νμ, ν΄λΌμ΄μΈνΈ λν, κ°λ°μ)μ΄ ν μν΄μ μλ리μ€λ₯Ό λ§λ€κ³ ,
κ°λ°μλ μ΄μ μκ±°νμ¬ μ½λλ₯Ό μμ±ν¨
μ¬μ©μ κ΄μ μ ν μ€νΈλ‘ E2E νμμ μ΄μ©νμ¬ νμΈν¨
μννΈμ¨μ΄ λ΄λΆ ꡬ쑰λ ꡬν λ°©λ²μ κ³ λ €ν기보λ€λ μ€μ μ¬μ©μ κ΄μ μμ ν μ€νΈν¨ >> λΈλλ°μ€ ν μ€νΈ
// μ¬μ©μ μλλ¦¬μ€ μ 체 νλ¦ κ²μ¦ (API λ 벨)
@Test
@DisplayName("[μμΈ] λμΌ κΈ°κ° λμΌ μ¬μ΄νΈ μ€λ³΅ μμ½ κ±°λΆ")
void μ€λ³΅_μμ½_μλμ_μμΈ_λ°μ() {
// given - "A-1" μ¬μ΄νΈμ "νκΈΈλ"μ μμ½μ΄ μλ€
μμ½_μμ±_μμ²("A-1", "2024-08-15", "2024-08-17", "νκΈΈλ", 4);
// when - "κΉμ² μ"κ° κ°μ κΈ°κ°μ μμ½ μλνλ€
ExtractableResponse<Response> response = μμ½_μμ±_μμ²(
"A-1", "2024-08-15", "2024-08-17", "κΉμ² μ", 4
);
// then - μμ½μ΄ κ±°λΆλλ€
assertThat(response.statusCode()).isEqualTo(HttpStatus.CONFLICT.value());
assertThat(response.jsonPath().getString("message"))
.isEqualTo("ν΄λΉ κΈ°κ°μ μ΄λ―Έ μμ½μ΄ μ‘΄μ¬ν©λλ€");
}
- HTTP μμ²/μλ΅
- ν° λΉμ¦λμ€ λ‘μ§