Тестирование и использование Cocoapods в проекте Swift

Я пишу приложение в Swift, используя XCode 6 Beta-6. Я использую Cocoapods, и я создаю некоторые модульные тесты.

Проблема заключается в следующем: видимо, невозможно создать проект, содержащий:

1) Проект написан в Swift

2) Некоторые стручки, установленные с использованием cocoapods

3) Файл заголовка моста Objective-C, который импортирует некоторые элементы

4) Единичные тесты

Это звучит странно, но следуйте моим шагам: после запуска pod install создайте заголовок моста Objective-C и импортируйте один модуль: все работает. Теперь напишите несколько тестов: чтобы проверить свои собственные классы, вам нужно импортировать модуль, называемый "как ваш проект" (или лучше, "как главная цель" ): в моем проекте "MyAwesomeApp" я должен написать import MyAwesomeApp в моих файлах тестов.

К сожалению, на этом этапе XCode не будет компилироваться: в моей строке import MyAwesomeApp с ошибкой "Не удалось импортировать заголовок моста" /path/to/MyAwesomeApp/MyAwesomeApp/MyAwesomeApp -Bridging-Header.h "

и в файле Bridging-Header появляется ошибка "xxx.h file not found", исключая возможность импорта контейнера.

Кроме того, если я не импортирую контейнеры в файле моста Obj-c, проект будет компилироваться отлично.

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

Знаете ли вы, есть ли решение? Что мне не хватает? Благодаря

ПРИМЕЧАНИЕ. В качестве обходного пути я мог импортировать модули в Objective-C Bridge Header, а вместо основного модуля в моих тестах добавить все классы, которые я хочу протестировать в своей "тестовой" цели. Это будет работать, но это не самое чистое решение (я думаю)

Ответ 1

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

Вам нужно либо скопировать эти значения под целевую аудиторию, либо попробовать и изменить свой подфайл, чтобы включить как основные, так и тестовые цели и повторно запустить install:

platform :ios, '7.0' 
link_with 'mainapp', 'mainappTests'
...

Также позаботьтесь о любых других путях заголовков, которые могут потребоваться и не связаны с CocoaPods.

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

Надеюсь, что это поможет.

Ответ 2

Возможно, вы настроили параметр "Objective-C Bridging Header" на уровне Project, так что цель "Test" наследует это значение, и, возможно, эта цель "Test" не связана с Cocoapods.

Используйте link_with, поскольку @sergio предлагает или устанавливает конфигурацию "Pods *.debug/release" для целевой цели "Test" в "Project- > Info- > Configuration".

Ответ 3

В дополнение к команде link_with в моем подфайле мне пришлось импортировать мой основной модуль проекта в тестовый файл. Таким образом, классы и методы не должны публиковаться.

Обратите внимание на специальный @testable annotation

@testable import my_tutorial_app

Также мое основное название проекта содержало в нем не-буквенно-цифровые символы, мне пришлось заменить их символами подчеркивания _