Test Fixture(테스트 픽스처)
Setup & Teardown
public class OrderProcessingServiceTest {
private OrderProcessingService orderProcessingService;
private InventoryService inventoryService;
private PaymentService paymentService;
@BeforeEach
void setUp() {
// 공통적으로 필요한 서비스 초기화
inventoryService = new InventoryService();
paymentService = new PaymentService();
// OrderProcessingService 초기화
orderProcessingService = new OrderProcessingService(inventoryService, paymentService);
}
@AfterEach
void tearDown() {
// 테스트 종료 후 리소스 해제
inventoryService.clear();
}
@Test
@DisplayName("재고가 충분하고 결제가 성공하면 주문이 성공한다.")
void testOrderSuccess() {
// Given: 필요한 아이템을 재고에 추가
Item item1 = new Item("item1", 100.0);
inventoryService.addItem(item1, 10);
// When: 아이템을 주문할 때
Order order = new Order(item1, 2);
boolean result = orderProcessingService.processOrder(order);
// Then: 주문이 성공해야 한다
assertTrue(result);
assertEquals(8, inventoryService.getStock(item1));
}
@Test
@DisplayName("재고가 부족한 경우 주문이 실패해야 한다.")
void testOrderFailureDueToInsufficientStock() {
// Given: 재고를 낮게 설정
Item item2 = new Item("item2", 50.0);
inventoryService.addItem(item2, 1);
// When: 재고보다 많은 수량을 주문할 때
Order order = new Order(item2, 2);
boolean result = orderProcessingService.processOrder(order);
// Then: 주문이 실패해야 한다
assertFalse(result);
assertEquals(1, inventoryService.getStock(item2)); // 재고는 그대로 남아야 한다
}
}테스트 독립성
Test Data 생성 로직 분리
Test Data Factory
Parameterized Test
Last updated