Подтвердить что ты не робот

Есть ли более базовый учебник для C-модуля тестирования?

Я стараюсь следовать вместе с официальным учебным пособием здесь, но для этого требуется знание autotools, чего у меня нет. Я надеялся просто написать пару быстрых тестов, и я нахожу этот урок подавляющим. Он полагается на много магии в autoconf, automake и некоторых макросах Check, я думаю, и это не объясняет, как Check действительно работает, чтобы я мог вручную создавать тесты.

Может кто-нибудь рекомендовать более простой учебник, который не требует autotools?

4b9b3361

Ответ 1

Вам, конечно, не нужно изучать autotools, чтобы использовать Check in small projects. Скажем, наш main() находится в main.c, а наша реализация .c имеет функцию, суммирующую 2 ints. (реализация .h содержит только прототип функции)

#include "implementation.h"

int sum(int a, int b) {

    return a + b;
}

Вы можете написать тест следующим образом:

#include "implementation.h"

#test sum2test
    fail_unless(sum(3, 2) == 5, "sum function borked");
    fail_unless(sum(-3, 2) == -1, "sum function borked");
    fail_unless(sum(3, -2) == 1, "sum function borked");
    fail_unless(sum(-3, -2) == -5, "sum function borked");

Сохраните файл в файле implementation-test.check(вы можете выбрать любое имя/расширение, которое хотите, но оставайтесь с ними, если хотите следовать моему руководству), а затем запустите включенный awk script, который поставляется с Check. Вам даже не нужно беспокоиться с шаблоном кода для рамки проверки! (для более подробной информации man checkmk)

checkmk implementation-test.check >implementation-test.c

Выход будет следующим:

/*
 * DO NOT EDIT THIS FILE. Generated by checkmk.
 * Edit the original source file "implementation-test.check" instead.
 */

#include <check.h>

#line 1 "implementation-test.check"
#include "implementation.h"

START_TEST(sum2test)
{
#line 4
    fail_unless(sum(3, 2) == 5, "sum function borked");
    fail_unless(sum(-3, 2) == -1, "sum function borked");
    fail_unless(sum(3, -2) == 1, "sum function borked");
    fail_unless(sum(-3, -2) == -5, "sum function borked");
}
END_TEST

int main(void)
{
    Suite *s1 = suite_create("Core");
    TCase *tc1_1 = tcase_create("Core");
    SRunner *sr = srunner_create(s1);
    int nf;

    suite_add_tcase(s1, tc1_1);
    tcase_add_test(tc1_1, sum2test);

    srunner_run_all(sr, CK_ENV);
    nf = srunner_ntests_failed(sr);
    srunner_free(sr);

    return nf == 0 ? 0 : 1;
}

Затем просто включите -lcheck, когда вы скомпилируете, чтобы получить связанную библиотеку проверки и запустить программу!

gcc -Wall -o sum2ints-test implementation.c implementation-test.c -lcheck
./sum2ints

Ниже приведен простой make файл, чтобы вы начали. Сохраните его в файле sum2ints.makefile и затем создайте реализацию .c вместе с main, run:

make -f sum2ints.makefile

Чтобы создать и запустить реализацию .c с нашей версией-test.c, созданной из checkmk, запустите:

make -f sum2ints.makefile test

-

CFLAGS=-Wall
LIBS=-lcheck

all: sum2ints

sum2ints: main.o implementation.o
gcc -o sum2ints main.o implementation.o

main.o: main.c implementation.h
gcc $(CFLAGS) -c main.c

implementation.o: implementation.c implementation.h
gcc $(CFLAGS) -c implementation.c

test: sum2ints-test
./sum2ints-test

sum2ints-test: implementation-test.o implementation.o
gcc -o sum2ints-test implementation.o implementation-test.o $(LIBS)

implementation-test.o: implementation-test.c implementation.h
gcc $(CFLAGS) -c implementation-test.c

Я подготовил ZIP файл для вас, содержащий все вышеперечисленное.

https://dl.dropbox.com/u/1987095/test-check.zip

Ответ 2

О, я думаю, вам лучше изучить autotools, которые должны быть известны в C Programming Area.

Если вы хотите использовать unittest и MinUnit, это лучший выбор.

Изучите Autoconf, Automake, сделайте здесь

Ответ 3

Я проверил несколько руководств. В этом один из них был из коробки:

file.c

#include <stdio.h>
#include <assert.h>

#define run_test(fn_name) \
    printf("%s\n", #fn_name); \
    fn_name()

// Stupid sample tests
void test_foo()
{
    assert(1 < 2);
}

void test_bar()
{
    assert(NULL == (void*)0);
}

int main(int argc, char *argv[])
{
    run_test(test_foo);
    run_test(test_bar);
    printf("\nOK\n");
    return 0;
}

построить и запустить

[email protected] ~/ $ make file
[email protected] ~/ $ ./file

test_foo
test_bar

OK