xctest - макрос препроцессора

Можно ли определить макрос в настройках цели (тестирования) или в файле .pch тестирования, чтобы он передавался всему приложению?
Или есть ли уже доступный макрос для проверки (из кода), если мы провести тест?

e.g.:

#if TEST=1
  // do something
#else
  // do something else
#endif

Причина, по которой я хочу этого, состоит в том, чтобы пропустить некоторый код, утверждения и т. д. во время тестирования (без необходимости изменять #define в основном приложении .pch каждый раз, когда я запускаю тесты).

Спасибо.


person alex-i    schedule 18.06.2014    source источник
comment
Продвинулись ли вы дальше в этом вопросе. Я хотел бы добавить некоторые тестовые приборы в свой код. Но не хочу, чтобы это отображалось в производственном коде. Некоторые расширения и вспомогательные функции. Такого рода вещи?   -  person ahalls    schedule 20.08.2014
comment
Лично я использовал нечто подобное, как описано здесь: stackoverflow.com/a/15725328/727817 . Еще одним хорошим вариантом будет настройка новой конфигурации сборки только для тестирования stackoverflow.com/a/14718914/727817.   -  person alex-i    schedule 20.05.2016


Ответы (1)


Похоже, вы можете сделать это очень похоже на Objective-C. Компилятор Swift использует командный ключ -D. Чтобы адаптировать это к тестированию, я определил нужный мне литерал только в настройках Test Target Build.

Инструкции:

Build settings for the Test Target -> 
      Swift Compiler Custom Flags -> 
         -DTEST (yes, including the -D prefix)

Включает этот код:

// Objective-C and Swift
#if TEST
// Test only code version code
#else
// App only code
#endif

Я нашел решение в этой статье о переходе на swift.

person ahalls    schedule 20.08.2014
comment
Я считаю, что это работает так же, как установка #define внутри .pch цели теста, которая влияет только на тестовые классы, но не на фактические классы приложений. Я тестировал с помощью 'Other C Flags', возможно, для Swift все по-другому. - person alex-i; 08.04.2015