Я использую фреймворк CUnit для отображения результатов тестирования. (Я новичок в области программирования & S.O., поэтому пошаговые ответы очень ценятся).
Можно ли как-нибудь использовать ту же платформу CUnit, когда я тестирую функции, которые ожидаю выхода ()? Мне так не кажется, но я все равно хотел бы спросить - он будет отображать результат «успешно / неудачно» вместе с другими моими тестами CUnit, поэтому его идеал.
Если нет, я искал другие дружественные по отношению к noob решения (например, этот пост ), но я не могу использовать GOTO / setjmp / longjmp. Решение также должно быть переносимым.
Я использую командную строку Mac & gcc для запуска этого кода.
EDIT
Одним из предложенных решений является использование директивы C Pre-Processor (CPP) / «mocking» , что выглядит идеально? Я использовал следующий код в моем файле test.c:
#define ERROR(PHRASE) {fprintf(stderr,"Fatal Error %s occurred in %s, line %d\n",PHRASE, FILE, LINE); exit(2);}
#ifdef ERROR(PHRASE)
#define ERROR(PHRASE) {printf("In test phase");}
#endif
#ifndef ERROR(PHRASE #define ERROR(PHRASE) {printf("Not In test phase");}
#endif
Вот сообщение об ошибке, которое мне выдает терминал:
test.c:30:9: warning: 'ERROR' macro redefined [-Wmacro-redefined]
#define ERROR(PHRASE) {printf("In test phase");}
^
test.c:26:9: note: previous definition is here
#define ERROR(PHRASE) {fprintf(stderr,"Fatal Error %s occured in %s, lin...
^
test.c:32:14: warning: extra tokens at end of #ifndef directive
[-Wextra-tokens]
#ifndef ERROR(PHRASE) {printf("Not In test phase");}
Удаление (PHRASE) по-прежнему приводит к тем же ошибкам.
EDIT
Если насмешка с использованием #ifdef была полезна для всех остальных, это был самый простой способ решить эту проблему в конце. Этот сайт тоже был полезен.