수색…


소개

많은 개발자들이 단위 테스트를 사용하여 소프트웨어가 예상대로 작동하는지 확인합니다. 단위 테스트는 더 큰 소프트웨어 조각을 확인하고 결과가 예상과 일치하는지 확인합니다. 테스트 프레임 워크는 설치 / 분해 서비스를 제공하고 테스트를 조정함으로써 단위 테스트를보다 쉽게 ​​만듭니다.

C에서 사용할 수있는 단위 테스트 프레임 워크가 많이 있습니다. 예를 들어, Unity는 순수한 C 프레임 워크입니다. 사람들은 C ++ 테스트 프레임 워크를 사용하여 C 코드를 테스트합니다. 많은 C ++ 테스트 프레임 워크도 있습니다.

비고

테스트 장치 :

TDD - 테스트 주도 개발 :

C에서 이중 메커니즘 테스트 :

  1. 링크 타임 대체
  2. 함수 포인터 대체
  3. 전처리 대체
  4. 결합 된 링크 시간 및 함수 포인터 대체

C ++에서 사용되는 C ++ 테스트 프레임 워크에 대한 참고 사항 : C 프로그램을 테스트 할 때 C ++ 프레임 워크를 사용하는 방법은 여기 에서 설명하는 것과 같이 매우 일반적인 방법입니다.

Cpp Testest

CppUTest 는 C 및 C ++ 단위 테스트를위한 xUnit 스타일의 프레임 워크입니다. C ++로 작성되었으며 이식성과 디자인의 단순성을 목표로합니다. 메모리 누수 탐지, 모의 건물 작성 및 Google 테스트와 함께 테스트 실행을 지원합니다. Visual Studio 및 Eclipse CDT의 도우미 스크립트 및 샘플 프로젝트가 함께 제공됩니다.

#include <CppUTest/CommandLineTestRunner.h>
#include <CppUTest/TestHarness.h>


TEST_GROUP(Foo_Group) {}

TEST(Foo_Group, Foo_TestOne) {}

/* Test runner may be provided options, such
   as to enable colored output, to run only a
   specific test or a group of tests, etc. This
   will return the number of failed tests. */

int main(int argc, char ** argv)
{
    RUN_ALL_TESTS(argc, argv);
}

테스트 그룹에는 setup()teardown() 메소드가있을 수 있습니다. setup 메소드는 각 테스트 전에 호출되고 teardown() 메소드는 후에 호출됩니다. 둘 다 선택적이며 둘 중 하나를 독립적으로 생략 할 수 있습니다. 다른 메소드와 변수도 그룹 내에서 선언 될 수 있으며 해당 그룹의 모든 테스트에서 사용할 수 있습니다.

TEST_GROUP(Foo_Group)
{
    size_t data_bytes = 128;
    void * data;

    void setup()
    {
        data = malloc(data_bytes);
    }

    void teardown()
    {
        free(data);
    }

    void clear()
    {
        memset(data, 0, data_bytes);
    }
}

통합 테스트 프레임 워크

Unity 는 단위 테스트를위한 xUnit 스타일의 테스트 프레임 워크입니다. C로 완전히 작성되었으며, 빠르고, 간단하며, 표현력이 풍부하고 확장 가능합니다. 특히 임베디드 시스템의 단위 테스트에도 유용합니다.

함수의 반환 값을 검사하는 간단한 테스트 케이스는 다음과 같습니다.

void test_FunctionUnderTest_should_ReturnFive(void)
{
    TEST_ASSERT_EQUAL_INT( 5, FunctionUnderTest() );
}

전체 테스트 파일은 다음과 같습니다.

#include "unity.h"
#include "UnitUnderTest.h" /* The unit to be tested. */

void setUp (void) {} /* Is run before every test, put unit init calls here. */
void tearDown (void) {} /* Is run after every test, put unit clean-up calls here. */

void test_TheFirst(void)
{
    TEST_IGNORE_MESSAGE("Hello world!"); /* Ignore this test but print a message. */
}

int main (void)
{
    UNITY_BEGIN();
    RUN_TEST(test_TheFirst); /* Run the test. */
    return UNITY_END();
}  

Unity는 몇 가지 예제 프로젝트, makefile 및 좀 더 긴 테스트 파일을 만드는 데 도움이되는 Ruby 레이크 스크립트를 제공합니다.

CMocka

CMocka 는 mock 객체를 지원하는 C 용 프레임 워크 테스팅 프레임 워크입니다. 표준 C 라이브러리 만 필요하고 다양한 컴퓨팅 플랫폼 (임베디드 포함) 및 다양한 컴파일러에서 작동합니다. 여기에는 mock, API 문서 및 다양한 예제를 사용 하여 테스트하는 방법에 대한 자습서있습니다 .

#include <stdarg.h>
#include <stddef.h>
#include <setjmp.h>
#include <cmocka.h>

void null_test_success (void ** state) {}

void null_test_fail (void ** state)
{
    assert_true (0);
}

/* These functions will be used to initialize
   and clean resources up after each test run */
int setup (void ** state)
{
    return 0;
}

int teardown (void ** state)
{
    return 0;
}


int main (void)
{
    const struct CMUnitTest tests [] =
    {
        cmocka_unit_test (null_test_success),
        cmocka_unit_test (null_test_fail),
    };

    /* If setup and teardown functions are not
       needed, then NULL may be passed instead */

    int count_fail_tests =
        cmocka_run_group_tests (tests, setup, teardown);

    return count_fail_tests;
}


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow