시나리오 테스트 실행 중에, 특정 변수의 값을 확인하고자 할 때는 테스트 케이스를 나누어 확인합니다. 예를 들어, 주기 단위가 ms인 테스트에서 2초와 4초에 특정 변수의 변화를 알고 싶다면 다음과 같이 테스트 케이스를 설계합니다.
테스트 케이스(TC) | 시간 | 누적 시간 |
---|---|---|
1 | 1999 | 1999 |
2 | 1 | 2000 |
3 | 1999 | 3999 |
4 | 1 | 4000 |
TC1과 TC2를 통해 2초 전/후의 값 변화를 확인하고 TC3과 TC4를 통해 4초 전/후의 값 변화를 확인합니다.
이러한 방식으로 테스트 케이스를 나누어 원하는 시점에 원하는 값을 확인할 수 있습니다. 간단한 예제를 통해 자세히 설명하겠습니다.
소스 코드 및 요구사항
예제로 사용할 소스 코드와 요구사항은 아래와 같습니다.
#include <stdio.h>
#include <stdbool.h>
typedef enum {
CLOSED, OPEN
} OpenCloseState;
typedef enum {
OFF, ON
} OnOffState;
OpenCloseState doorState;
OpenCloseState doorSensor;
OnOffState ignitionState;
OnOffState lightState;
void initial() {
doorState = OPEN;
doorSensor = OPEN;
ignitionState = OFF;
lightState = OFF;
}
void lightOn() { if (lightState != ON) lightState = ON; }
void lightOff() { if (lightState != OFF) lightState = OFF; }
void setDoorSensor(OpenCloseState sensor) {
doorSensor = sensor;
}
void tick() {
static int timer = 0;
if (doorState == OPEN && doorSensor == CLOSED) {
timer = 500;
lightOn();
} else if (ignitionState == ON){
timer = 0;
lightOff();
}
if (timer > 0) timer--;
if (timer == 0) lightOff();
doorState = doorSensor;
}
요구사항: 자동차의 열려있던 문이 닫히면, 실내등이 5초간 켜진 후 꺼진다.
테스트 설계
이러한 요구사항을 만족하는 테스트를 설계하려고 합니다.
주기 함수와 주기 단위 설계
실내등이 5초간 켜진 후 꺼진다
와 timer = 500;
을 통해, timer의 시간 단위는 ms이며, tick()
함수가 10ms마다 호출되는 함수임을 알 수 있습니다. 따라서, tick()
을 주기 함수로 설정하고, 주기 단위를 ms, tick()
의 시작 시간을 0, 주기 시간을 10으로 설정합니다.
초기화 함수 설계
initial()
함수를 초기화 함수로 호출하여 각 센서와 상태에 초깃값을 할당합니다. 이때, doorState
와 doorSensor
의 초깃값 모두 OPEN
입니다. 자동차의 열려있던 문이 닫히면
이라는 요구사항에 따라 setDoorSensor()
함수의 매개변수로 CLOSED
값을 주어 문 닫힘을 설정합니다.
테스트 케이스 및 시나리오 변수(시간
) 설계
요구사항을 확인하기 위해 lightState
의 출력값을 확인합니다. 5초간 실내등이 켜져 있고 5초 이후에 실내등이 꺼져야 합니다. 즉, tick()
이 499회 호출될 때까지 lightState
가 ON
이고, 500번째 호출에서 lightState
가 OFF
가 됩니다. 이를 확인하기 위해 첫 번째 테스트 케이스에서 시간을 4990, 두 번째 테스트 케이스에서 시간을 10으로 입력합니다.
전역 변수에서 lightState
를 선택하고 [출력]에 체크하여 테스트 후 lightState
의 값을 확인합니다.
테스트 작성
위 설계를 토대로 테스트를 작성하면 다음과 같습니다.
테스트 결과 확인
테스트를 실행하고 [테스트 케이스] 탭에서 결과를 확인합니다.
0ms~4990ms 동안 lightState
가 ON(1)
이고 5000ms가 될 때 lightState
가 OFF(0)
이 됩니다. 시나리오 테스트를 이용하여 소스 코드가 요구사항을 만족하는 것을 확인했습니다.
Need more help with this?
Don’t hesitate to contact us here.