요구사항 테스트를 하다보면 다음과 같은 요구사항을 만나게 됩니다.

자동차의 열려있던 문이 닫히면, 실내등이 5초간 켜진 후 꺼진다.

이를 위한 타이머 함수가 있을 때, 해당 타이머 함수를 정해진 시간마다 반복 호출하여 5초 후 실내등이 꺼졌는지 확인하여야 합니다.

이처럼 주기적으로 호출되는 함수를 테스트해야 하는 경우가 있습니다. CT 2023.12부터 이러한 테스트를 돕기 위해 시나리오 테스트 기능을 제공합니다.

시나리오 테스트의 조건

일반 테스트를 시나리오 테스트로 전환하기 위해서는 아래 조건을 모두 만족하여야 합니다.

  • C 프로젝트
  • 테스트 대상 함수에 반환형이 void이고 매개변수가 없는 함수만 있어야 함

시나리오 테스트로 전환

[테스트 편집기] > [테스트 정보] > [테스트 대상 함수]에서 [시나리오 테스트로 전환]을 선택하여 시나리오 테스트로 전환합니다.

시나리오 테스트는 테스트 케이스 컨텍스트가 유지됩니다. 즉, 이전 테스트 케이스의 상태를 유지한 채 다음 테스트 케이스를 실행합니다.

시나리오 테스트

시나리오 테스트를 돕기 위한 변수 두 개가 추가됩니다.

  • 시간
    • [테스트 케이스 탭] 에서 값을 입력할 수 있습니다.
    • 테스트 케이스별로 for 문의 반복 횟수를 결정합니다.
  • 누적 시간
    • 테스트 케이스의 for 문 반복 횟수를 누적하여 보여줍니다.

테스트 대상 함수 중, 주기 함수에 두 가지 설정이 추가됩니다.

  • 시작 시간
    • 함수 호출을 시작하는 시간입니다.
    • 시작 시간이 40인 경우 누적 시간이 0~39일 때는 해당 함수가 호출되지 않습니다.
  • 주기 시간
    • 함수 호출을 반복하는 시간 간격입니다.
    • 주기 시간이 10인 경우, 누적 시간이 10, 20, 30, … 일 때 호출됩니다.

아래는 시나리오 테스트에 대한 이해를 돕기 위한 그림입니다.

주기 단위는 ms, μs, ns로 설정할 수 있습니다. 이 값은 테스트 보고서와 테스트 편집기에서만 표시되며 실제 실행 시간에 영향을 미치지 않습니다. 즉, 주기 단위를 ms로 설정하고 누적 시간이 5000이라고 하여도 실제로 5초 동안 수행되지 않습니다. 시나리오 테스트는 해당 시간을 모사하여 테스트를 진행합니다.

시나리오 테스트의 테스트 코드

[테스트 정보]에 설정한 값을 토대로 아래와 같이 테스트 코드가 생성됩니다.
초기화 함수의 경우, for 문을 반복하기 전에 한 번만 호출되는 함수이며 1번 테스트 케이스에서 최초로 한번 호출됩니다. 이후, 다른 테스트 케이스에서는 호출되지 않습니다.

	/*Declaration (parameter/return/target object) variables*/
	unsigned int CS_TC_SPENT_TIME = 0;  // 시간의 입력값이 저장됩니다.
	static unsigned int CS_TOTAL_SPENT_TIME = 0; // 테스트 케이스의 반복 횟수를 저장합니다. 이 변수의 값이 누적 시간의 출력값으로 저장됩니다.

	/*Input*/
	CS_TC_SPENT_TIME = CS_INT_INPUT(unsigned int,"CS_TC_SPENT_TIME");

	/* call initial function */
	if(CS_TOTAL_SPENT_TIME==0) {
		// 초기화 함수가 추가되는 위치
	}

	// 주기 함수들이 반복되는 부분. 시간의 입력값만큼 for문을 반복합니다.
	for(int CS_CYCLE_INDEX = 0; CS_CYCLE_INDEX < CS_TC_SPENT_TIME ; CS_CYCLE_INDEX++ ) {
		if( (CS_TOTAL_SPENT_TIME>=0) && ((CS_TOTAL_SPENT_TIME-0)%10==0) ) {

			/* TASK_1ms() */
			TASK_1ms();

		}
		CS_TOTAL_SPENT_TIME++;
	}

	/*Output*/
	CS_INT_OUTPUT(CS_TOTAL_SPENT_TIME, "CS_TOTAL_SPENT_TIME");

예제

시나리오 테스트를 활용하여 다양한 요구사항을 만족할 수 있습니다.

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

Thanks for your feedback.