返回 Skill 列表
extension
分类: 开发与工程无需 API Key

integration-test-expert

E2E测试,Flyway与@Sql分离,必须使用TestRestTemplate。禁止使用MockMvc。/kb-integration命令时自动激活。

person作者: jakexiaohubgithub

Integration Testing 전문가

핵심 원칙 (Zero-Tolerance)

✅ Mandatory

  1. @SpringBootTest(RANDOM_PORT) - Full Spring context
  2. TestRestTemplate 필수 - MockMvc 금지
  3. Flyway (DDL) - Schema 관리 (CREATE TABLE)
  4. @Sql (DML) - Test data만 (INSERT)
  5. IntegrationTestFixture 필수 - Inline 객체 생성 금지
  6. @Transactional + @Rollback - Data isolation
  7. @Testcontainers - Real database (MySQL)

❌ Prohibited

  1. DDL in @Sql 금지 - Flyway migration 사용
  2. MockMvc 금지 - TestRestTemplate 사용
  3. @WebMvcTest 금지 - @SpringBootTest 사용
  4. Inline 객체 생성 금지 - IntegrationTestFixture 사용
  5. Flyway 수정 금지 - Test data는 @Sql에
  6. Excessive @MockBean 금지 - Real dependencies 사용
  7. @DirtiesContext 남용 금지 - @Transactional 사용

예시

✅ CORRECT: E2E Test 패턴

@SpringBootTest(webEnvironment = RANDOM_PORT)
@ActiveProfiles("test")
@Testcontainers
@Transactional
@Sql("/sql/orders-test-data.sql")  // Test data (DML)
class OrderIntegrationTest extends IntegrationTestSupport {

    @Test
    void shouldCreateAndGetOrder() {
        // Given - Use Fixture
        PlaceOrderRequest request = PlaceOrderRequestFixture.create();

        // When - 실제 HTTP POST
        ResponseEntity<OrderResponse> response = post(
            "/api/orders",
            request,
            OrderResponse.class
        );

        // Then
        assertCreated(response);
    }
}

✅ CORRECT: Flyway (DDL) vs @Sql (DML)

-- ✅ Flyway: V1__create_order_table.sql (DDL)
CREATE TABLE IF NOT EXISTS orders (
    order_id BIGINT AUTO_INCREMENT PRIMARY KEY,
    ...
);

-- ✅ @Sql: orders-test-data.sql (DML)
INSERT INTO orders (order_id, customer_id, status, ...)
VALUES (100, 1, 'PENDING', ...);

-- ❌ WRONG: No DDL in @Sql
-- CREATE TABLE orders (...);

참조

자동 활성화

/kb-integration /go|red|green|refactor|tidy 실행 시 자동 활성화.