Xcode: TEST против макросов препроцессора DEBUG - PullRequest
34 голосов
/ 19 июля 2011

При создании нового проекта с модульными тестами XCode устанавливает конфигурацию сборки на Debug для схемы Test (то же самое для схемы Run).

Должен ли я различать Run (Command-R) и Test (Схемы Command-U)?

Т.е. мне следует создать новую конфигурацию сборки под названием Test, добавить к ней макрос препроцессора TEST = 1 и использовать вместо этого в качестве конфигурации сборки для схемы Test?Или я должен оставить Run & Test для Debug?

Я пришел из Ruby / Rails-среды, где у вас обычно есть среда тестирования, разработки и производства.Мне кажется, что Debug - это как разработка, а Release - как производство, но мы пропускаем тест, поэтому я думаю, что имеет смысл добавить Test.

Комментарии?Мнения?Предложения?

Я специально спрашиваю об этом, потому что хочу скомпилировать что-нибудь для Test с помощью:

#ifdef TEST
// Do something when I test.
#endif

Не думаю, что это имеет значение, если я также скомпилирую это для Debug.Итак, я действительно мог бы просто сделать:

#ifdef DEBUG
// Do something when I run or test.
#endif

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

Ответы [ 11 ]

0 голосов
/ 06 ноября 2014

Посмотрите на переменные среды, чтобы увидеть, запущены ли модульные тесты. Аналогично ответу Роберта, но я проверяю производительность только один раз.

+ (BOOL)isRunningTests {
   static BOOL runningTests;
   static dispatch_once_t onceToken;

   // Only check once
   dispatch_once(&onceToken, ^{
      NSDictionary* environment = [[NSProcessInfo processInfo] environment];
      NSString* injectBundle = environment[@"XCInjectBundle"];
      NSString* pathExtension = [injectBundle pathExtension];
      runningTests = ([pathExtension isEqualToString:@"octest"] ||
                      [pathExtension isEqualToString:@"xctest"]);
   });
   return runningTests;
}
...