전역 변수의 값에 따라 함수의 호출 여부가 결정될 때는 [함수 호출 전/후 코드]를 이용하여 테스트합니다.

// Before call code
if( globalVar == 1 ) {
// Function call code.
func()
// After call code
}

이러한 방식으로 함수 호출 전/후 코드에 if 문을 추가하여 특정 조건을 만족할 때 함수를 호출하도록 합니다. 신호등과 음향신호기 예제를 통해 자세히 설명하겠습니다.

소스 코드 및 요구사항

예제로 사용할 소스 코드와 요구사항은 아래와 같습니다.

#include <stdio.h>

typedef enum {
    RED,
    GREEN
} TrafficLightState;

typedef enum {
	ON,
	OFF
} SoundSystemState;

TrafficLightState trafficLight;
SoundSystemState soundSystem;

void init() {
	trafficLight = GREEN;
	soundSystem = OFF;
}

void setSoundSystem (SoundSystemState state) {
	soundSystem = state;
}

void alarmForBlind() {
	if( trafficLight == GREEN ) {
		printf("beep for blind\n");
	} else if( trafficLight == RED ) {
		printf("warning for blind\n");
	}
}

void tick() {
    static int timer = 50;

	if(timer > 0) {
		timer--;
	}

	if( timer == 0 ) {
		timer = 50;
		if( trafficLight == GREEN ) {
			trafficLight = RED;
		} else if( trafficLight == RED ) {
			trafficLight = GREEN;
		}
	}
}
요구사항: 빨간불과 파란불은 각각 5분 동안 켜진다.
음향신호기가 켜져 있고 신호등이 파란불이면, 시각장애인을 위한 신호가 1초에 한 번씩 출력된다.
음향신호기가 켜져 있고 신호등이 빨간불이면, 시각장애인을 위한 경고가 1초에 한 번씩 출력된다.

테스트 설계

이러한 요구사항을 만족하는 테스트를 설계하려고 합니다.

주기 함수와 주기 단위 설계

tick() 함수에서 신호등의 timer50이고, 요구사항에서 각각의 등이 5초씩 켜진다고 하였으므로, 주기 단위는 ms이고 tick()의 주기 시간은 100ms입니다.
음향신호기가 1초에 한 번씩 신호를 출력하므로 alarmForBlind()의 주기 시간은 1000ms(1초)입니다.

초기화 함수 설계

initial() 함수를 초기화 함수로 호출하여 각 센서와 상태에 초깃값을 할당합니다. 이때, trafficLight의 초깃값은 GREEN이고 soundSystem의 초깃값은 OFF입니다.

테스트 케이스 및 변수 설계

요구사항을 확인하기 위하여 음향신호기를 켜고 파란불, 빨간불일 때 신호를 확인합니다. 이에 맞게 테스트 케이스를 다음과 같이 설계하겠습니다.

TC 시간 음향신호기
1 5000 OFF
2 5000 OFF
3 5000 ON
4 5000 ON
5 5000 OFF
6 5000 OFF

음향신호기의 값을 바꿔주기 위해 사용자 코드에 다음과 같이 입력합니다. 테스트 케이스가 3일 때, 음향신호기를 켜고 테스트 케이스가 5일 때, 음향신호기를 끕니다.

if (CS_TESTCASENO()==3) {
	setSoundSystem(ON);
} else if (CS_TESTCASENO()==5) {
	setSoundSystem(OFF);
}

전역 변수에서 trafficLight를 선택하고 [출력]에 체크하여 신호등의 상태를 확인합니다.

테스트 작성

위 설계를 토대로 테스트를 작성하면 다음과 같습니다.

  • [테스트 정보] > [사용자 코드]
  • [테스트 정보] > [테스트 대상 함수]
  • [테스트 정보] > [호출 전/후 코드]

테스트 결과 확인

테스트를 실행하고 [테스트 케이스] 탭과 [소스 코드 편집기]에서 결과를 확인합니다.

  • [테스트 케이스] 탭에서 5초 단위로 trafficLight가 바뀌는 것을 확인합니다.
  • [소스 코드 편집기]에 표시되는 커버리지를 통해 테스트 케이스 #3에서 신호가 울리고 테스트 케이스 #4에서 경고가 울린 것을 확인합니다.

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

Thanks for your feedback.