Projects/HubEleven

[동시성 처리] 재고 감소 통합 테스트 코드 3 - Test Fixture

annovation 2026. 1. 1. 21:05

Test Fixture 활용

  • Test Fixture를 사용하지 않고 UUID를 매번 랜덤으로 생성하면, 테스트 실행마다 서로 다른 데이터가 만들어져 동일한 테스트라도 결과를 재현하기 어려워진다.
  • 이는 테스트 실패 시 원인 분석을 어렵게 만들고, 테스트 신뢰도를 떨어뜨린다.
  • Test Fixture를 통해 고정된 UUID를 사용하면, 테스트 데이터가 항상 동일한 상태로 구성되어 테스트 실패 시 원인을 명확히 추적할 수 있고 안정적인 테스트를 보장할 수 있다.

StockServiceImplTest.java

💡수정 전

// 테스트 전 상품 재고 입력
    @BeforeEach
    public void setUp() {

        // 테스트용 고정 ID 생성 (각 테스트마다 새로 생성)
        testProductId = UUID.randomUUID(); // 테스트 fixture
        testCompanyId = UUID.randomUUID();
        testHubId = UUID.randomUUID();

        Stock stock = Stock.create(
                testProductId,
                testCompanyId,
                testHubId,
                100
        );
        jpaStockRepository.saveAndFlush(stock);
    }
  • 매 테스트 실행마다 서로 다른 UUID가 생성됨
  • 테스트 실패 시, 어떤 ID로 실패했는지 로그만 보고 추적하기 어려움
  • 특정 ID를 기준으로 디버깅하거나 재현하기 어려움

💡리팩토링

  • 테스트 전용 Fixture 사용
public class StockFixture {

    public static Stock createDefaultStock() {
        return Stock.create(
            UUID.fromString("00000000-0000-0000-0000-000000000001"),
            UUID.fromString("00000000-0000-0000-0000-000000000002"),
            UUID.fromString("00000000-0000-0000-0000-000000000003"),
            100
        );
    }
}
  • 테스트 코드에서는 아래와 같이 활용할 수 있다.
@BeforeEach
void setUp() {
    jpaStockRepository.saveAndFlush(StockFixture.createDefaultStock());
}