Exploratory
end-to-end
UI까지 포함한 테스트
component
서비스 전체를 테스트
integration
외부 서비스(DB, AWS 등)와의 연동 테스트
unit
가장 작은 단위의 테스트
- GIVEN: 전제 조건
- WHEN: 행위 호출
- THEN: 결과 확인
- SUT: System Under Test, 테스트 대상, class
테스트 대상 코드와 상호작용하는 객체(Mock 객체, stub)
JUnit4의 (IDE 등에 대한)확장성 부족으로 등장하였다.
테스팅 프레임워크를 런칭하기 위한 근간을 제공
TestEngine의 실제 구현체로서 Jupiter API를 사용해서 테스트 코드를 작성할 수 있게 한다.
JUnit 4버전으로 작성한 테스트 코드를 실행할 수 있도록 한다.
inorder의 경우 메소드 호출 순서가 다르면 테스트를 통과할 수 없다.
var voucherRepository = mock(VoucherService.class)
@ExtendWith(SpringExtension.class)
junit과 상호작용하여 test context와 상호 작용할 수 있도록 만들어준다.
@ContextConfiguration
OR @ContextConfiguration(classes = {AppConfiguration.class})
@ExtendWith(SpringExtension.class)
@ContextConfiguration
public class KdtSpringContextTests {
@Configuration
@ComponentScan(
basePackages = {"org.prgms.kdt.order", "org.prgms.kdt.voucher"}
)
static class Config { }
@Autowired
ApplicationContext context;
@Autowired
OrderService orderService;
@Autowired
VoucherRepository voucherRepository;
// 통합 테스트
// 실제 빈들을 이용하여 테스트한 것
@Test
@DisplayName("orderService를 사용해서 주문을 생성할 수 있다.")
void testOrderService() {
// given
var fixedAmountVoucher = new FixedAmountVoucher(UUID.randomUUID(), 100);
voucherRepository.insert(fixedAmountVoucher);
// when
var order = orderService.createOrder(UUID.randomUUID(), List.of(new OrderItem(UUID.randomUUID(), 200,1 )), fixedAmountVoucher.getVoucherId());
// then
assertThat(order.totalAmount(), is(100L));
assertThat(order.getVoucher().isEmpty(), is(false));
assertThat(order.getVoucher().get().getVoucherId(), is(fixedAmountVoucher.getVoucherId()));
assertThat(order.getOrderStatus(), is(OrderStatus.ACCEPTED));
}
}
@SpringJUnitConfig
= @ExtendWith
+ @ContextConfiguration
@SpringJUnitConfig
public class KdtSpringContextTests {
@Configuration
@ComponentScan(
basePackages = {"org.prgms.kdt.order", "org.prgms.kdt.voucher"}
)
static class Config { }
...
}
테스트시 사용할 프로파일을 설정한다.