본문 바로가기

4.개발 및 운영 환경

CUNIT 테스팅

작성: ospace.tistory.com (ospace114@empal.com)

CUnit 실행 모드

CUnit 실행하는 모드는 4가지 모드가 존재

  • Automated 모드(Automated.h 사용): 자동화시 유용
    • 출력을 XML파일로 저장
  • Basic 모드(Basic.h 사용)
    • 모든 플랫폼에 사용가능
    • stdout(표준출력)으로 출력
  • Console 모드(Console.h 사용): 일반적 추천
    • 모든 플랫폼에 사용가능
    • stdout(표준출력)으로 출력
  • Curses 모드(CUCurses.h 사용)
    • 리눅스의 make menuconfig와 같은 화면
    • 링크시 -lcurses 같이 사용

테스트를 위한 기본 설정

기본 헤더 파일

#include "Cunit.h"

테스트 초기화

CUnit 사용위한 모든 테스트 사용위해서는 반드시 필요한 과정.

if (CUE_SUCCESS != CU_initialize_registry()) {
   return CU_get_error();
}

테스트 종료

CUnit에서 테스트가 종료되면 리소스 해제함

CU_cleanup_registry();

테스트위한 테스트 단위 설정 정보

테스트위한 테스트 함수

void test_sum1
{
  CU_ASSERT( 3 == (1 + 2));
}

단위테스트

테스트 위한 단위 테스트를 설정하기 위한 구조체임. 테스트하는 함수 포인터와 테스트 명을 등록한다.

typedef struct CU_TestInfo {
      char *pName;                       /**< Test name. */
      CU_TestFunc pTestFunc;             /**< Test function. */
} CU_TestInfo;

사용예

CU_TestInfo  tests[] = {
  { "Test_1", test_sum1 },
  { "Test_2", test_sum2 },
  CU_TEST_INFO_NULL
};

테스트 집합(Test suite)

테스트 여러개를 모아서 하나의 테스트 집합을 구성하기 위해 사용한다.

typedef struct CU_SuiteInfo {
        char             *pName;         /**< Suite name. */
        CU_InitializeFunc pInitFunc;     /**< Suite initialization function. */
        CU_CleanupFunc    pCleanupFunc;  /**< Suite cleanup function */
        CU_TestInfo      *pTests;        /**< Test case array - must be NULL terminated. */
} CU_SuiteInfo;

사용예

CU_SuiteInfo suites[] = {
  { "Suite_1", NULL, NULL, tests },
  CU_TEST_INFO_NULL
};

Console 테스트 방법

테 스트 추가하는 방법은 다음의 CU_add_suite(), CU_add_tests()를 사용하거나, 위의 구조체 CU_SuiteInfo와 CU_TestInfo를 바로 설정해서 사용하는 방법이 있다. 앞의 예제 처럼 초기화되었다면, 사용하는 방법은 간단히 살펴보면 다음과 같다. 그런 후에 함수를 사용한 방법을 살펴보겠다.

CU_TestInfo  tests[] = {
   { "Test_1", test_sum1 },
   { "Test_2", test_sum2 },
   CU_TEST_INFO_NULL
};

CU_SuiteInfo suites[] = {
   { "Suite_1", NULL, NULL, tests },
   CU_TEST_INFO_NULL
};

CU_register_suites(suites);
CU_console_run_tests();

Test Suite 추가

CU_pSuite suite = NULL;
suite = CU_add_suite("Suite_1", init_suite1, clean_suite1);
if( NULL == suite ) {
  CU_cleanup_registry();
  return CU_get_error();
}

Test 추가

if( NULL == CU_add_tests(suite, "Test_1", test_sum1 ) ) {
  CU_cleanup_registry();
  return CU_get_error();
}

Test 실행

if( CUE_SUCCESS != CU_registery_suites(suites) ){
  CU_cleanup_registry();
  return CU_get_error();
}
CU_basic_set_mode(CU_BRM_VERBOSE);
CU_basic_run_tests();

CUnit 빌드

gcc인경우

gcc -o 실행파일명 소스파일명.c -lcunit -L/somewhere/cunit_lib

참고

CUnit의 사용, http://galaxyra.linuxstudy.pe.kr/galaxyra/14

CUnit: AUnit Testing Framework for C, http://openracoon.org/?p=20

[CUnit] C에서 Unit test 하기, http://ospace.tistory.com/142

반응형