Szukaj…


Wprowadzenie

Wielu programistów używa testów jednostkowych, aby sprawdzić, czy ich oprogramowanie działa zgodnie z oczekiwaniami. Testy jednostkowe sprawdzają małe jednostki większych elementów oprogramowania i sprawdzają, czy wyniki są zgodne z oczekiwaniami. Ramy testowe ułatwiają testowanie jednostkowe, zapewniając usługi konfiguracji / demontażu i koordynując testy.

Istnieje wiele ram testowania jednostkowego dostępnych dla C. Na przykład, Unity jest czystym szkieletem C. Ludzie dość często używają ram testowych C ++ do testowania kodu C. istnieje również wiele ram testowych C ++.

Uwagi

Uprząż testowa:

TDD - Test Driven Development:

Przetestuj podwójne mechanizmy w C:

  1. Podstawienie czasu połączenia
  2. Podstawianie wskaźnika funkcji
  3. Podstawienie preprocesora
  4. Połączone podstawianie czasu połączenia i wskaźnika funkcji

Uwaga na temat frameworków testowych C ++ używanych w C: Używanie frameworków C ++ do testowania programu C jest dość powszechną praktyką, jak wyjaśniono tutaj .

CppUTest

CppUTest jest strukturą w stylu xUnit do testowania jednostkowego C i C ++. Jest napisany w C ++ i ma na celu zapewnienie przenośności i prostoty projektowania. Obsługuje wykrywanie wycieków pamięci, tworzenie makiet i przeprowadzanie testów wraz z testem Google. W zestawie skrypty pomocnicze i przykładowe projekty Visual Studio i 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);
}

Grupa testowa może mieć metodę setup() i teardown() . Metoda setup jest wywoływana przed każdym testem, a metoda teardown() jest wywoływana później. Oba są opcjonalne i każde z nich można pominąć niezależnie. Inne metody i zmienne mogą być również zadeklarowane w grupie i będą dostępne dla wszystkich testów tej grupy.

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 Test Framework

Unity to platforma testowa w stylu xUnit do testowania jednostkowego C. Jest napisana całkowicie w C i jest przenośna, szybka, prosta, ekspresyjna i rozszerzalna. Został zaprojektowany tak, aby był szczególnie przydatny do testowania jednostkowego systemów wbudowanych.

Prosty przypadek testowy, który sprawdza wartość zwracaną przez funkcję, może wyglądać następująco

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

Pełny plik testowy może wyglądać następująco:

#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 zawiera niektóre przykładowe projekty, pliki makefile i niektóre skrypty rake Ruby, które pomagają nieco ułatwić tworzenie dłuższych plików testowych.

CMocka

CMocka to elegancki framework do testowania jednostkowego dla C z obsługą fałszywych obiektów. Wymaga tylko standardowej biblioteki C, działa na szeregu platform obliczeniowych (w tym wbudowanych) i z różnymi kompilatorami. Zawiera samouczek dotyczący testowania z próbami, dokumentację API i wiele przykładów .

#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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow