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).