- @Test 테스트 메소드
- @BeforeEach 테스트
- 각 테스트 전에 실행된다.
- 테스트 마다 새로운 인스턴스가 만들어진다.
JUnit 5의 테스트 (PaymentServiceTest)
- JUnit 5를 활용하여 테스트 코드를 손쉽게 작성할 수 있다.
class PaymentServiceTest {
@Test
@DisplayName("prepare 메소드가 요구사항 3가지를 잘 충족했는지 검증")
void prepare() throws IOException {
// given
PaymentService paymentService = new PaymentService(new WebApiExRateProvider());
// when
Payment payment = paymentService.prepare(1L, "USD", BigDecimal.TEN);
// then
// 환율 정보 가져온다
Assertions.assertThat(payment.getExRate()).isNotNull();
// 원화환산금액 계산
Assertions.assertThat(payment.getConvertedAmount()).isEqualTo(payment.getExRate().multiply(payment.getForeignCurrencyAmount()));
// 원화환산금액 유효시간 계산
Assertions.assertThat(payment.getValidUntil()).isAfter(LocalDateTime.now());
Assertions.assertThat(payment.getValidUntil()).isBefore(LocalDateTime.now().plusMinutes(30));
}
}
- PaymentServiceTest의 문제점
- 우리가 제어할 수 없는 외부 시스템에 문제가 생긴다면?
- ExRateProvider가 제공하는 환율 값으로 계산한 것인가?
- 환율 유효 시간 계산은 정확한 것인가?