Xcode 7: Невозможно создать инструмент командной строки Swift с целью unit test
О, Xcode!
Меня заглушат. Если я создаю приложение Mac OS Cocoa, я бесплатно получаю цель unit test. Но я хочу написать инструмент командной строки (или даже библиотеку, которую я могу связать с инструментом командной строки), и написать некоторые модульные тесты против нее. Я буду проклят, если смогу это понять.
Я получил достаточно далеко, что у меня есть цель командной строки и тестовая цель. Я могу "@testable import" использовать мой модуль командной строки и использовать код в тестовом коде без ошибок в Xcode. Однако, как только я пытаюсь запустить мой тест (Cmd-U), я получаю сообщение об ошибке. Ни один из классов в основном модуле не может быть связан. Какие?
Я часами занимался этим, и Великая Google не помогла. (Я использую Xcode 7, а Xcode 6 кажется совсем другим). Может ли кто-нибудь мне помочь?
Спасибо.
Ответы
Ответ 1
Пока единственное решение, которое я нашел для этой проблемы, - это вручную добавить все файлы, содержащие код, который вы хотите проверить, на unit test target вручную:
![введите описание изображения здесь]()
Это то, что вы не сделали бы при тестировании целевого приложения. Я думаю, что тот факт, что цель командной строки не может быть выбрана, поскольку тестовый узел для цели unit test может быть связан с этой проблемой:
![введите описание изображения здесь]()
Еще одна возможность, которая может потребовать немного больше работы, состоит в том, чтобы определить всю вашу логику в Framework и написать приложение командной строки в качестве потребителя API-интерфейсов, которые она предоставляет.
Таким образом вы можете легко unit test создать обычную схему, а затем записать тесты интеграции для приложения командной строки в виде скриптов, которые его называют, и утверждать результаты.
Ответ 2
После борьбы с этим вот решение, которое сработало для меня:
- Шаг 1: Добавить тестовый комплект. Редактоp > Добавить цель, Cocoa Пакет тестирования
- Шаг 2: Отредактируйте схему. Продукт > Схемa > Изменить схему. Выберите "Тест", нажмите "+". В разделе "Выберите цели для тестирования как часть этой схемы" выберите целевую аудиторию.
- Шаг 3: Попробуйте с помощью простого теста
Ответ 3
Бывают случаи, когда добавление одного и того же файла в обе утилиту и в тестовую цель невозможно (некоторые петли приводят к переопределению).
Однако возможно создать дополнительный целевой объект приложения, добавить все файлы утилиты, кроме main.swift, в приложение, а затем использовать это приложение в качестве приложения для хостинга для тестов (а также включить "Разрешить тестирование хост-приложения" API).