Мой босс сказал мне написать модульные тесты для небольшого файла c (foo.c), который я написал. Я много читал об истории модульного тестирования в Интернете, например о тестировании только одной функции и создании полностью автоматизированных тестов, но я не нашел учебника о том, как реализовать настоящий модульный тест. Я попробовал следующий подход, но не получилось.
/*foo.c*/
#include foo.h
#if UNIT_TESTING
#define main example_main
#endif
int foo1(...){...}
int foo2(...){...}
int main(int argc,char **argv) {
foo1(...);
foo2(...);
}
/*test_foo.c*/
#include "foo.h"
void main(int argc,char **argv) {
int i = example_main(argc,argv);
return;
}
/*foo.h*/
int example_main(int argc,char **argv);
В качестве cmd я использую:
gcc -Wall -pedantic foo.c test_foo.c -DUNIT_TEST=1 -o test_foo.out
Я получаю следующие ошибки:
test_foo.c: warning: return type of ‘main’ is not ‘int’
test_foo.c: In function ‘main’:
test_foo.c warning: unused variable ‘i’
/tmp/ccbnW95J.o: In function `main':
test_foo.c: multiple definition of `main'
/tmp/ccIeuSor.o:foo.c:(.text+0x538b): first defined here
/tmp/ccbnW95J.o: In function `main':
test_foo.c:(.text+0x17): undefined reference to `example_main'
collect2: ld returned 1 exit status
Что я сделал не так? Или вы бы порекомендовали другой подход к модульному тестированию.
Спасибо!
[обновление]
исправил опечатки в моем коде и разместил обновленные сообщения об ошибках
[обновление / уточнение]
Я должен использовать cmockery, поэтому я попробовал пример «calculator.c» с веб-сайта cmockery, но не смог запустить его. В моем чтении у меня сложилось впечатление, что модульные тесты не зависят от фреймворка. Поэтому я хотел начать с очень простого примера, чтобы поиграть. "#if UNIT_TESTING #define main example_main"
взято из cmockry 'manual'.