본문 바로가기

카테고리 없음

#31 단위 테스트와 통합 테스트

단위 테스트(Unit Test)

단위 테스트는 애플리케이션의 작은 단위(보통 메서드 또는 클래스)를 독립적으로 테스트하는 것을 말합니다. 단위 테스트의 주요 목표는 코드의 특정 부분이 예상대로 작동하는지 확인하는 것입니다. 단위 테스트를 작성할 때는 테스트 대상 코드의 외부 의존성을 최소화하는 것이 중요합니다. 이를 위해 Mock 객체를 자주 사용합니다.

 

 

 

장점

  • 빠른 실행 속도
  • 문제 발생 지점이 명확하게 드러남
  • 코드 변경 시 빠른 피드백 제공

주요 라이브러리 및 도구

  • JUnit: 가장 많이 사용되는 테스트 프레임워크
  • Mockito: Mock 객체를 쉽게 만들고 사용할 수 있도록 도와주는 라이브러리
@Service
public class CalculatorService {
    public int add(int a, int b) {
        return a + b;
    }
}

 

 

@RunWith(MockitoJUnitRunner.class)
public class CalculatorServiceTest {

    @InjectMocks
    private CalculatorService calculatorService;

    @Test
    public void testAdd() {
        int result = calculatorService.add(1, 2);
        assertEquals(3, result);
    }
}

 

 

 

 

 

 

통합 테스트(Integration Test)

통합 테스트는 애플리케이션의 여러 부분이 함께 작동하는지를 테스트하는 것을 말합니다. 이는 데이터베이스, 네트워크, 파일 시스템 등과 같은 외부 시스템과의 상호작용을 포함합니다. 통합 테스트의 주요 목표는 시스템의 여러 구성 요소가 올바르게 상호작용하는지 확인하는 것입니다.

 

 

 

 

장점

  • 시스템의 실제 동작을 검증
  • 외부 시스템과의 상호작용 테스트 가능
  • 전체 애플리케이션의 신뢰성을 높임

 

주요 라이브러리 및 도구

  • Spring Test: Spring 애플리케이션 컨텍스트를 로드하고 테스트할 수 있는 기능 제공
  • @SpringBootTest: Spring Boot 애플리케이션의 통합 테스트를 쉽게 작성할 수 있도록 도와주는 어노테이션
@RestController
@RequestMapping("/api")
public class CalculatorController {

    @Autowired
    private CalculatorService calculatorService;

    @GetMapping("/add")
    public ResponseEntity<Integer> add(@RequestParam int a, @RequestParam int b) {
        int result = calculatorService.add(a, b);
        return ResponseEntity.ok(result);
    }
}

 

 

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@RunWith(SpringRunner.class)
public class CalculatorControllerTest {

    @Autowired
    private TestRestTemplate restTemplate;

    @Test
    public void testAdd() {
        ResponseEntity<Integer> response = restTemplate.getForEntity("/api/add?a=1&b=2", Integer.class);
        assertEquals(HttpStatus.OK, response.getStatusCode());
        assertEquals(3, response.getBody().intValue());
    }
}

 

 

차이점 요약

  • 단위 테스트는 작은 코드 단위를 독립적으로 테스트하고, 빠른 실행 속도와 명확한 문제 파악을 제공합니다. 외부 의존성을 Mocking하여 테스트합니다.
  • 통합 테스트는 애플리케이션의 여러 부분이 함께 작동하는지를 테스트하며, 실제 환경과 유사한 조건에서 실행됩니다. 이는 전체 시스템의 신뢰성을 높이는 데 도움을 줍니다.

단위 테스트와 통합 테스트는 서로 보완적인 관계로, 둘 다 적절히 작성하고 유지하는 것이 중요합니다. 이를 통해 애플리케이션의 품질과 안정성을 높일 수 있습니다.