반응형
🎯 목적
앞에서 직접 작성한 로그 저장 함수를 사용했지만, **보다 체계적인 테스트 프레임워크(CUnit)**를 활용하면 테스트 작성, 실행, 결과 출력이 더욱 편리해집니다. 여기에 에비던스 자동 저장 기능을 추가하면 자동화된 품질 검증 시스템을 구축할 수 있습니다.
📌 1. CUnit이란?
CUnit은 C언어용 유닛 테스트 프레임워크로, 테스트 케이스 및 테스트 스위트를 구성하고 테스트 결과를 콘솔 또는 XML 파일로 출력할 수 있습니다.
🧰 2. 설치 방법 (Ubuntu 기준)
sudo apt-get update
sudo apt-get install libcunit1 libcunit1-doc libcunit1-dev
🛠️ 3. 샘플 프로젝트 구조
cunit_test/
├── add.c
├── add.h
├── test_add.c
└── evidence_writer.c
📄 4. 코드 구성
✅ add.h
// add.h
#ifndef ADD_H
#define ADD_H
int add(int a, int b);
#endif
✅ add.c
// add.c
#include "add.h"
int add(int a, int b) {
return a + b;
}
✅ evidence_writer.c (에비던스 저장)
// evidence_writer.c
#include <stdio.h>
#include <time.h>
void write_evidence_to_file(const char* test_case, const char* result, const char* detail) {
FILE *fp = fopen("cunit_evidence.log", "a");
if (fp == NULL) return;
time_t now = time(NULL);
struct tm *t = localtime(&now);
fprintf(fp, "[%04d-%02d-%02d %02d:%02d:%02d] TEST: %s | RESULT: %s | DETAIL: %s\n",
t->tm_year+1900, t->tm_mon+1, t->tm_mday,
t->tm_hour, t->tm_min, t->tm_sec,
test_case, result, detail);
fclose(fp);
}
✅ test_add.c
// test_add.c
#include <CUnit/CUnit.h>
#include <CUnit/Basic.h>
#include "add.h"
extern void write_evidence_to_file(const char*, const char*, const char*);
void test_add_func(void) {
int result = add(2, 3);
if (result == 5) {
write_evidence_to_file("test_add_func", "PASS", "2 + 3 == 5");
} else {
char detail[100];
snprintf(detail, sizeof(detail), "Expected 5 but got %d", result);
write_evidence_to_file("test_add_func", "FAIL", detail);
}
CU_ASSERT(result == 5);
}
int main() {
if (CUE_SUCCESS != CU_initialize_registry())
return CU_get_error();
CU_pSuite suite = CU_add_suite("AddSuite", 0, 0);
if (!suite) {
CU_cleanup_registry();
return CU_get_error();
}
if (!CU_add_test(suite, "test of add()", test_add_func)) {
CU_cleanup_registry();
return CU_get_error();
}
CU_basic_set_mode(CU_BRM_VERBOSE); // 상세 출력
CU_basic_run_tests(); // 테스트 실행
CU_cleanup_registry();
return CU_get_error();
}
🔧 5. 컴파일 및 실행
gcc -o cunit_test test_add.c add.c evidence_writer.c -lcunit
./cunit_test
📂 6. 테스트 결과 예시
🖥️ 콘솔 출력
Suite: AddSuite
Test: test of add() ... passed
Run Summary: Type Total Ran Passed Failed Inactive
tests 1 1 1 0 0
📝 로그 파일 (cunit_evidence.log
)
[2025-07-23 10:45:12] TEST: test_add_func | RESULT: PASS | DETAIL: 2 + 3 == 5
💡 팁: XML 출력 기능 활용하기 (CI/CD 연동)
CUnit은 XML 출력도 가능합니다. CI 툴(Jenkins 등)에서 활용하려면 다음처럼 XML 방식으로 설정하세요.
CU_set_output_filename("cunit_output");
CU_list_tests_to_file();
CU_automated_run_tests();
실행하면 cunit_output.xml
로 자동 저장됩니다.
✅ 결론
- CUnit을 사용하면 테스트 코드 작성이 구조화되고,
- 로그 파일로 테스트 에비던스를 쉽게 확보할 수 있으며,
- XML 출력까지 활용하면 CI/CD 파이프라인과 연동하여 자동화된 테스트 보고서 시스템도 구축 가능합니다.
📎 참고 링크
- CUnit 공식 사이트
- GitHub - Unity Test Framework ← CUnit보다 더 가볍고 임베디드 시스템에서 많이 사용
반응형
'C' 카테고리의 다른 글
Unity 프레임워크 기반 C언어 테스트 에비던스 저장 샘플 (4) | 2025.07.26 |
---|---|
리눅스 C 언어 GDB 디버깅 가이드: 기초부터 실전까지 (6) | 2025.07.22 |
Linux 환경에서 C 언어로 AI 프로그램 만들기 - 간단한 신경망 구현 (2) | 2025.06.21 |
Linux 환경에서 C 언어 함수 최적화 방법: 실전 예제 중심으로 (2) | 2025.06.19 |
Linux에서 슈퍼유저만 실행 가능한 C 함수 예제: mount()를 활용한 예제 (2) | 2025.06.17 |
댓글