배경
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;
}
통합 테스트 시나리오
initialize()
를 호출하여 초기화를 진행한다.setMode()
를 호출하여 모드를COOLER
로 변경한다.control_air_conditioner()
를 호출하여 설정을 적용한다.setMode()
를 호출하여 모드를HEATER
로 변경한다.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단계: 테스트 시나리오 구성
- [테스트 편집기] > [테스트 정보 탭]으로 이동합니다.
- 호출할 함수를 [테스트 대상 함수]에 추가합니다.
Ctrl
+Click
,Shift
+Click
을 통해 여러 함수를 한 번에 선택할 수 있습니다.
- [위로]/[아래로] 버튼을 사용해 앞서 정의한 실행 순서대로 함수 목록을 정렬합니다.
시나리오 5. 에어컨 설정을 두 번 적용
처럼 동일한 함수를 여러 번 호출하는 경우, 호출 대상 함수의 [반복 횟수]를 변경합니다. 이 시나리오에서는 두 번째control_air_conditioner()
함수의 [호출 횟수]를2
로 변경합니다.
- 테스트를 저장합니다.
4단계: 테스트 데이터 입력
- [테스트 편집기] > [테스트 케이스 탭]으로 이동합니다.
- 시나리오에 맞게
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 → …)
- 컨텍스트 유지 X: 각 테스트 케이스 실행 후에도
6단계: 테스트 실행
[테스트 실행] 버튼을 클릭하여 하나의 유닛 테스트로 작성된 통합 테스트 시나리오를 테스트할 수 있습니다. 이러한 방식으로 작성된 유닛 테스트는 아래 통합 테스트와 동일한 방식으로 수행됩니다.
결론
[유닛 테스트 뷰]와 [통합 테스트 뷰]는 각각 다른 특징이 있습니다.
유닛 테스트 뷰 | 통합 테스트 뷰 |
---|---|
[VS Code로 디버깅], [디버그 정보 확인] 등 다양한 디버깅 기능 제공 | 테스트별로 다른 스텁 적용 가능 |
스텁을 한 번만 연결하여 하나의 통합 테스트 시나리오 전체에 적용 가능 | 각 함수별로 테스트를 나누어 설계하여 개별 유닛 테스트의 커버리지를 명확히 구분 가능 |
[테스트 대상 함수 추가]와 [ [테스트 케이스 컨텍스트 유지하기] 기능으로 통합 테스트와 동일한 기능 제공 | 각 함수별로 테스트를 나누어 설계하여 실행한 함수에 대한 보고서를 개별 유닛 테스트로 확인 가능 |
두 가지 테스트 뷰 모두 통합 테스트의 요구사항을 충족할 수 있습니다. 테스트 목적과 구조에 따라 적절한 방식을 선택하시기 바랍니다.
Need more help with this?
Don’t hesitate to contact us here.