Как лучше всего включить / выключить юнит-тесты с помощью #defines - PullRequest
1 голос
/ 28 июня 2010

У меня есть файл с юнит-тестами

    testOne() {...}
    testTwo() {...}
...

, но при устранении неполадок я хотел бы отключить все, кроме юнит-теста, который вызывает проблемы (из-за большого количества журналов).На данный момент я сделал так:

#if 0
testOne() {...}
#endif
..
#if 1
testTroublesome() {...}
#endif

Но мне было интересно, есть ли лучший, более удобный способ сделать это?

Ответы [ 2 ]

1 голос
/ 28 июня 2010

Два примечания:

  • Большинство платформ модульных тестов предоставляют возможность организовать ваши тесты в наборы, поэтому вы можете запускать только определенные тесты.тесты, так что журналы не создаются.Вывод модульного теста должен быть максимально простым, чтобы не утонуть в бесполезных деталях.Т.е., если все тесты пройдены, вы должны увидеть только что-то вроде «123 теста пройдено».или, если есть ошибки, имена неудачных тестов и соответствующие сообщения об ошибках.
1 голос
/ 28 июня 2010

Например, у вас может быть переменная окружения для обозначения того, какой тест нужно запустить, с неустановленным значением, чтобы запустить их все (что будет обычным случаем). Вот так: (это C, но я думаю, что это будет работать и в объективном C)

char *env = getenv ("MY_TEST_ENV");

и затем при запуске каждого теста

if (! env || 0 == strcmp (env, "testOne"))
  testOne();

Или вы можете поставить такое же условие внутри самого теста и просто вернуться, если он не пройден. Это не помешает вашим тестам быть скомпилированными, но я не думаю, что это ваша проблема, не так ли? Просто установите переменную среды для теста, который вы хотите запустить, и ни один из остальных не будет.

EDIT
Чтобы сделать это еще проще, поместите это в макрос

#define RUN_TEST(fn) do{if(!getenv("MY_TEST_ENV")||!strcmp(getenv("MY_TEST_ENV"),#x))x();}while(0)

и всегда выполняйте свой тест с этим

RUN_TEST(test_one);

... и у вас есть небольшой фреймворк для юнит-тестирования. Однако, прежде чем заходить слишком далеко и изобретать слишком много колес, вам следует (как уже было отмечено), возможно, взглянуть на существующие рамки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...