배경

CT 2025.06는 통합 테스트를 설계하는 여러 방법을 제공합니다. 일반적으로 [통합 테스트 뷰]를 사용하지만, [유닛 테스트 뷰]에서도 동일한 통합 테스트 시나리오를 효과적으로 설계하고 실행할 수 있습니다.

[유닛 테스트 뷰]를 이용한 통합 테스트는 다음과 같은 장점이 있습니다.

  • 테스트 대상 함수를 추가하여 [통합 테스트 뷰]와 유사한 방식으로 동작
  • 하나의 테스트에서 여러 함수를 연속적으로 실행하여 스텁 연결 등 중복 작업 감소
  • [유닛 테스트 뷰]의 디버깅 기능 사용 가능

[유닛 테스트 뷰]에서 통합 테스트를 설계 및 실행하기

이 가이드에서는 간단한 에어컨 예제를 이용하여 [유닛 테스트 뷰]에서 통합 테스트를 설계하고 실행하는 방법을 설명합니다.

통합 테스트 시나리오 정의

예제로 사용할 소스 코드와 통합 테스트 시나리오는 다음과 같습니다.

예제 소스 코드

void heating() { /* very complex code... */ }
void cooling() { /* very complex code... */ }
void fanOnly() { /* very complex code... */ }

typedef enum {
	OFF, COOLER, HEATER, FAN_ONLY
} Mode;
Mode mode = OFF;

void control_air_conditioner() {
    switch(mode) {
	case COOLER:
		cooling();
		break;
	case HEATER:
		heating();
		break;
	case FAN_ONLY:
		fanOnly();
		break;
	}
}

void initialize() {
	mode = FAN_ONLY;
	control_air_conditioner();
}

void setMode(Mode newMode) {
	mode = newMode;
}

통합 테스트 시나리오

  1. initialize()를 호출하여 초기화를 진행한다.
  2. setMode()를 호출하여 모드를 COOLER로 변경한다.
  3. control_air_conditioner()를 호출하여 설정을 적용한다.
  4. setMode()를 호출하여 모드를 HEATER로 변경한다.
  5. control_air_conditioner()두 번 연속 호출하여 설정을 적용한다.

테스트 설계 및 실행

이제 위의 시나리오를 [유닛 테스트 뷰]에서 설계하겠습니다. 순서는 아래와 같습니다.

  • 1단계: 테스트 대상 함수 결정 및 순서 정의
  • 2단계: 유닛 테스트 생성
  • 3단계: 테스트 시나리오 구성
  • 4단계: 테스트 데이터 입력
  • 5단계: 테스트 케이스의 컨텍스트 유지하기
  • 6단계: 테스트 실행

1단계: 테스트 대상 함수 결정 및 순서 정의

시나리오에 따라 호출할 함수와 순서를 아래와 같이 결정합니다.

시나리오 테스트 대상 함수 실행 순서
초기화 진행 initialize() 1
모드를 COOLER로 변경 setMode(COOLER) 2
에어컨 설정 적용 control_air_conditioner() 3
모드를 HEATER로 변경 setMode(HEATER) 4
에어컨 설정을 두 번 적용 control_air_conditioner()
control_air_conditioner()
5
6

2단계: 유닛 테스트 생성

테스트 대상 함수와 실행 순서가 결정되면 유닛 테스트를 생성합니다. 유닛 테스트의 대상 함수는 통합 테스트에서 가장 먼저 실행되는 함수나 시나리오의 중심이 되는 함수를 선택합니다. 이 예제에서는 initialize(), control_air_conditioner() 중에 control_air_conditioner()를 선택하여 유닛 테스트를 생성합니다.

3단계: 테스트 시나리오 구성

  1. [테스트 편집기] > [테스트 정보 탭]으로 이동합니다.
  2. 호출할 함수를 [테스트 대상 함수]에 추가합니다. Ctrl + Click, Shift + Click을 통해 여러 함수를 한 번에 선택할 수 있습니다.
  3. [위로]/[아래로] 버튼을 사용해 앞서 정의한 실행 순서대로 함수 목록을 정렬합니다.
  4. 시나리오 5. 에어컨 설정을 두 번 적용처럼 동일한 함수를 여러 번 호출하는 경우, 호출 대상 함수의 [반복 횟수]를 변경합니다. 이 시나리오에서는 두 번째 control_air_conditioner() 함수의 [호출 횟수]를 2로 변경합니다.
  5. 테스트를 저장합니다.

4단계: 테스트 데이터 입력

  1. [테스트 편집기] > [테스트 케이스 탭]으로 이동합니다.
  2. 시나리오에 맞게 setMode(Mode) 함수의 인자를 입력합니다.
    • 첫 번째 setMode(Mode) 함수의 인자 newMode의 입력값에 COOLER를 입력합니다.
    • 두 번째 setMode(Mode) 함수의 인자 newMode_1의 입력값에 HEATER를 입력한 뒤 저장합니다.

5단계: 테스트 케이스의 컨텍스트 유지하기

[통합 테스트 뷰]에서는 테스트 케이스 사이에 컨텍스트를 유지한 상태로 테스트를 실행합니다. 유닛 테스트에서도 동일하게 수행하려면 [테스트 편집기] > [설정 탭]에서 [테스트 케이스 컨텍스트 유지하기]를 체크합니다.

[테스트 케이스 컨텍스트 유지하기]란?
기본적으로 CT의 각 테스트 케이스는 서로 영향을 주지 않고 독립적으로 실행됩니다. 하지만 [테스트 케이스 컨텍스트 유지하기] 옵션은 이러한 독립 실행 원칙을 변경합니다. 이 옵션을 활성화하면, 이전 테스트 케이스가 종료된 시점의 상태가 초기화되지 않고, 다음 테스트 케이스의 시작 상태로 이어집니다.
예를 들어, 전역변수 int a의 초기값이 0이고, a의 값을 1 증가시키는 함수를 테스트하는 경우:
  • 컨텍스트 유지 X: 각 테스트 케이스 실행 후에도 a의 값은 1로 유지
  • 컨텍스트 유지 O: 테스트 케이스를 실행할 때마다 1씩 증가(1 → 2 → 3 → …)

6단계: 테스트 실행

[테스트 실행] 버튼을 클릭하여 하나의 유닛 테스트로 작성된 통합 테스트 시나리오를 테스트할 수 있습니다. 이러한 방식으로 작성된 유닛 테스트는 아래 통합 테스트와 동일한 방식으로 수행됩니다.

결론

[유닛 테스트 뷰]와 [통합 테스트 뷰]는 각각 다른 특징이 있습니다.

유닛 테스트 뷰 통합 테스트 뷰
[VS Code로 디버깅], [디버그 정보 확인] 등 다양한 디버깅 기능 제공 테스트별로 다른 스텁 적용 가능
스텁을 한 번만 연결하여 하나의 통합 테스트 시나리오 전체에 적용 가능 각 함수별로 테스트를 나누어 설계하여 개별 유닛 테스트의 커버리지를 명확히 구분 가능
[테스트 대상 함수 추가]와 [ [테스트 케이스 컨텍스트 유지하기] 기능으로 통합 테스트와 동일한 기능 제공 각 함수별로 테스트를 나누어 설계하여 실행한 함수에 대한 보고서를 개별 유닛 테스트로 확인 가능

두 가지 테스트 뷰 모두 통합 테스트의 요구사항을 충족할 수 있습니다. 테스트 목적과 구조에 따라 적절한 방식을 선택하시기 바랍니다.

Need more help with this?
Don’t hesitate to contact us here.

Thanks for your feedback.