Автоматическое тестирование кода в c при выполнении - PullRequest
1 голос
/ 20 декабря 2010

каждый исходный файл имеет функцию:

unsigned char test(){
    //return true if tests succceed false otherwise
}

Каждый раз, когда исходный файл перекомпилируется, я хочу, чтобы тестовая функция этого файла запускалась при выполнении исполняемого файла, и если тесты возвращали false, чтобы остановить. Однако я хочу только код, тестовый код которого не был запущен с момента сборки.

Я думал, что мог бы использовать систему makefile, чтобы помочь с этой проблемой, так как makefiles будет перекомпилировать только измененный код, что именно то, что я хочу. Поэтому я думал добавить что-то к аргументам командной строки. Я видел пример, в котором они использовали эхо и дату, чтобы добавить время последнего изменения. Код будет записывать время последнего изменения в файл сохранения при успешном выполнении тестового кода, с которым он будет сравниваться в следующий раз.

Есть ли лучший способ? Тот, который не полагается на сделать? По крайней мере, есть ли способ, не полагаясь на специальные команды Unix? Наконец, даже если это невозможно, как будет выглядеть командная строка для добавления в файл.

1 Ответ

2 голосов
/ 20 декабря 2010

Да, вы можете сделать цель file.t зависимой от file.c.
Файл file.t будет сгенерирован на основании успешного завершения теста.

Будет проще, если вы вызовете свою тестовую функцию "main" и поместите ее в # ifdef, например:

#ifdef TEST
int main() {
    if (test_something() == 1)
        return 0;
    else
        return 1;
}
#endif

Конечно, вы можете делать и другие хитрые вещи, если хотите.

Пример Makefile (с использованием синтаксиса GNU Make)

all: foo.t

%.t: %.c
    gcc -DTEST $< -o $@.tmp
    if ./$@.tmp ; then echo "1" > $@; rm $@.tmp ; fi

Тем не менее! Вам, вероятно, будет лучше принять что-то вроде CUtest (http://cutest.sourceforge.net/).

...