Переключение тестирования assert

#c #testing #assert

#c #тестирование #утверждение

Вопрос:

У меня есть два исходных файла: один я хочу протестировать с помощью утверждений, второй содержит утверждения.

Моя проблема в том, что я не хочу, чтобы тестирование запускалось каждый раз при запуске самой программы, так есть ли способ включить или отключить тестирование assert в зависимости от аргумента makefile?

Или мне придется создать другой исходный файл, содержащий как код, который я хочу протестировать, так и само тестирование assert?

Ответ №1:

man 3 assert говорит

Если макрос NDEBUG определен в момент последнего включения <assert.h> , макрос assert() не генерирует код и, следовательно, вообще ничего не делает.

gcc ... -DNDEBUG предназначен для сборки выпуска и ничего не будет делать assert() .

Ответ №2:

Моя проблема в том, что я не хочу, чтобы тестирование выполнялось каждый раз при запуске самой программы

Если только второй файл, который вы упомянули, содержит инструкции assert, почему тестовый код должен выполняться при запуске программы?

Вот типичный способ разделения кода для модуля Foo, содержащего панель функций, и его модульного теста:

Foo.h

 #ifndef FOO_H
#define FOO_H

int Foo_Bar(int i);

#endif
 

Foo.c

 #include "Foo.h"

int Foo_Bar(int i)
{
    /*to be implemented*/
    return -1;
}
 

ФутЕстр.с

 #include "Foo.h"
#include <assert.h>

int main(void)
{
    assert(Foo_Bar(0) == 0);
    return 0;
}
 

myprog.c

 #include "Foo.h"

int main(void)
{
    int bar = Foo_Bar(0);
    /*...*/
    return 0;
}