Cmocka 빠른 시작

4377 단어 ctesting
오늘 저는 C 단위 테스트 프레임워크를 다시 배울 기회가 생겼습니다. 이것은 내 경력에서 3년 정도마다 발생하므로 매번 사용 가능한 항목을 빠르게 재조사하고 좋아 보이는 것을 선택합니다. 이번에는 cmocka 을 골랐습니다.

기본 페이지는 API 문서 및 슬라이드쇼로 연결됩니다. 이들 중 어느 것도 Cmocka로 프로젝트를 구축하는 예를 제공하지 않습니다. 그냥 굴릴 수 있는 빠른 시작 스켈레톤 프로젝트가 있을 때 정말 감사합니다. 그래서 그들의 first example from the API을 가져와서 그렇게 했습니다.

여기를 따라가기 위해 가장 먼저 해야 할 일은 cmocka를 다운로드하는 것입니다. source release of 1.1.5 을 잡았습니다.

아카이브 압축 해제:

tar -xzvf cmocka-1.1.5.tar.gz


cmocka 라이브러리를 빌드합니다. 내 프로젝트에서는 cmocka 라이브러리를 정적으로 컴파일하기를 원하므로 그에 따라 cmake를 사용하여 cmocka를 구성합니다.

cd cmocka-1.1.5
mkdir build
cd build
cmake -DWITH_STATIC_LIB=ON ..
make


cmocka는 libcmocka-static.a 라이브러리를 build/src 디렉토리에 빌드합니다. 이것은 테스트를 빌드하기 위해 테스트를 연결해야 하는 것입니다. 정적 cmocka 라이브러리를 사용한다는 것은 라이브러리가 생성된 바이너리에 복사됨을 의미합니다. 이렇게 하면 C 인터프리터가 런타임에 libcmocka를 찾을 필요가 없습니다. 이는 시스템에 libcmocka 라이브러리를 설치하지 않으려는 경우 또는 개발 환경이 아닌 다른 환경에서 테스트를 실행하려는 경우에 유용합니다. 이렇게 하면 바이너리가 더 커지고 다른 이식성 문제가 첨부되므로 많은 (프로덕션) 경우에 정적 라이브러리를 사용할 수 없습니다.

다음으로 다음 내용이 포함된 test.c 파일을 만듭니다.

#include <stdarg.h>
#include <stddef.h>
#include <setjmp.h>
#include <cmocka.h>
/* A test case that does nothing and succeeds. */
static void null_test_success(void **state) {
    (void) state; /* unused */
}
int main(void) {
    const struct CMUnitTest tests[] = {
        cmocka_unit_test(null_test_success),
    };
    return cmocka_run_group_tests(tests, NULL, NULL);
}


테스트 파일을 빌드합니다.

gcc -I cmocka-1.1.5/include/ -L cmocka-1.1.5/build/src/ test.c -l:libcmocka-static.a


그러면 a.out 바이너리가 생성됩니다. 실행!

$ ./a.out 
[==========] Running 1 test(s).
[ RUN      ] null_test_success
[       OK ] null_test_success
[==========] 1 test(s) run.
[  PASSED  ] 1 test(s).


그리고 당신은 간다. 실제 C 코드에 대한 단위 테스트를 작성하려는 경우 유일한 차이점은 테스트 중인 소스에 대한 헤더#include와 테스트와 함께 테스트 중인 소스 파일을 컴파일해야 한다는 것입니다.

좋은 웹페이지 즐겨찾기