CUnit 사용법에 대해 알아본다. CUnit은 모듈의 기능 테스트에 적합한 것 같다.
CUnit설치 방법은 이전 게시물을 참고한다.
CUnit 설치 방법
아래 페이지를 참고하여 작성하였다. 아래 페이지 내용의 일부분으로 API 중 자주 사용할 것 같은 부분이나 CUnit 설명들 필요한 부분만 작성하였다.
http://cunit.sourceforge.net/doc/index.html
1. 테스트 구조
CUnit의 테스트 구조는 아래와 같다.
Registry가 있고, Registry내부에 Suite들이 존재한다. 그리고 Suite내부에 Test들이 존재한다.
Test Registry | ------------------------------ | | Suite '1' . . . . Suite 'N' | | --------------- --------------- | | | | Test '11' ... Test '1M' Test 'N1' ... Test 'NM'
2. 일반적인 사용법
1) 테스트 함수 작성 (필요에 따라서 Initialize, Cleanup함수도 작성)
2) Registry에 등록 (CU_initialize_registry() 사용)
3) Registry에 Suite 등록 (CU_add_suite() 사용)
4) Suite에 Test 등록 (CU_add_test() 사용)
5) Running모드 함수 사용 (CU_console_run_tests() 등)
6) Registry 초기화 (CU_cleanup_registry() 사용)
3. Registry API
1) CU_ErrorCode CU_initialize_registry(void)
다른 CUnit 함수들을 사용전에 반드시 사용되어야한다.
Return Value
CUE_SUCCESS initialization was successful.
CUE_NOMEMORY memory allocation failed.
사용 예)
if (CUE_SUCCESS != CU_initialize_registry())
return CU_get_error();
2) void CU_cleanup_registry(void)
테스트가 완료되면 메모리를 반환하기 위하여 사용한다.
사용 예)
CU_cleanup_registry();
4. Suite API
CU_pSuite CU_add_suite(const char* strName, CU_InitializeFunc pInit, CU_CleanupFunc pClean)
Suite를 생성한다. 생성된 Suite는 자동으로 Registry에 등록된다. pInit과 pClean은 0를 return하면 Success로 처리되고, 0이 아니면 fail로 처리되는 파라미터가 없는 함수를 사용한다. Optional하며 불필요시 NULL을 준다.
Return Value
CUE_SUCCESS suite creation was successful.
CUE_NOREGISTRY the registry has not been initialized.
CUE_NO_SUITENAME strName was NULL.
CUE_DUP_SUITE the suite's name was not unique.
CUE_NOMEMORY memory allocation failed.
사용 예)
pSuite = CU_add_suite("Suite_1", init_suite1, clean_suite1);
if (NULL == pSuite) {
CU_cleanup_registry();
return CU_get_error();
}
5. Test 등록 API
CU_pTest CU_add_test(CU_pSuite pSuite, const char* strName, CU_TestFunc pTestFunc)
Suite에 Test를 등록시 사용한다.
Return Value
CUE_SUCCESS suite creation was successful.
CUE_NOSUITE the specified suite was NULL or invalid.
CUE_NO_TESTNAME strName was NULL.
CUE_NO_TEST pTestFunc was NULL or invalid.
CUE_DUP_TEST the test's name was not unique.
CUE_NOMEMORY memory allocation failed.
사용 예)
if ((NULL == CU_add_test(pSuite, "test of fprintf()", testFPRINTF)) )
{
CU_cleanup_registry();
return CU_get_error();
}
다음은 CUnit에서 제공하는 Test용 API다.
#include <CUnit/CUnit.h>
CU_ASSERT(int expression)
|
Assert that expression is TRUE (non-zero) |
CU_ASSERT_TRUE(value)
|
Assert that value is TRUE (non-zero) |
CU_ASSERT_FALSE(value)
|
Assert that value is FALSE (zero) |
CU_ASSERT_EQUAL(actual, expected)
|
Assert that actual = = expected |
CU_ASSERT_NOT_EQUAL(actual, expected))
|
Assert that actual != expected |
CU_ASSERT_PTR_EQUAL(actual, expected)
|
Assert that pointers actual = = expected |
CU_ASSERT_PTR_NOT_EQUAL(actual, expected)
|
Assert that pointers actual != expected |
CU_ASSERT_PTR_NULL(value)
|
Assert that pointer value == NULL |
CU_ASSERT_PTR_NOT_NULL(value)
|
Assert that pointer value != NULL |
CU_ASSERT_STRING_EQUAL(actual, expected)
|
Assert that strings actual and expected are equivalent |
CU_ASSERT_STRING_NOT_EQUAL(actual, expected)
|
Assert that strings actual and expected differ |
CU_ASSERT_NSTRING_EQUAL(actual, expected, count)
|
Assert that 1st count chars of actual and expected are the same |
CU_ASSERT_NSTRING_NOT_EQUAL(actual, expected, count)
|
Assert that 1st count chars of actual and expected differ |
CU_ASSERT_DOUBLE_EQUAL(actual, expected, granularity)
|
Assert that |actual - expected| <= |granularity| Math library must be linked in for this assertion. |
CU_ASSERT_DOUBLE_NOT_EQUAL(actual, expected, granularity)
|
Assert that |actual - expected| > |granularity| Math library must be linked in for this assertion. |
CU_PASS(message)
|
Register a passing assertion with the specified message. No logical test is performed. |
CU_FAIL(message)
|
Register a failed assertion with the specified message. No logical test is performed. |
7. Runnting Test API
Running Test Mode는 다음과 같이 네가지 Mode가 있다.
Interface | Platform | Description |
Automated | all | non-interactive with output to xml files |
Basic | all | non-interactive with optional output to stdout |
Console | all | interactive console mode under user control |
Curses | Linux/Unix | interactive curses mode under user control |
1) Automated
void CU_automated_run_tests(void)
테스트 결과가 XML 파일로 출력된다.
2) Basic
CU_ErrorCode CU_basic_run_tests(void)
테스트 결과가 stdout 으로 출력된다.
3) Console
void CU_console_run_tests(void)
테스트를 command ui 형태로 할 수 있다. (삼국지2 처럼 한글자 입력하는 형태)
4) Curses
void CU_curses_run_tests(void)
테스트를 curses ui 형태로 할 수 있다. (테스트를 안해봐서 어떤 형태인지 잘 모르겠다)
댓글 없음:
댓글 쓰기