Можете ли вы создать "суперсет" цель в XCode? - PullRequest
6 голосов
/ 05 января 2009

Для целей модульного тестирования я хотел бы создать цель проекта iPhone в XCode, которая включает все файлы выпуска приложения, а также некоторые дополнительные файлы, содержащие код, полезный для модульного тестирования пользовательского интерфейса.

Я могу сделать это, дублируя исходную цель приложения; однако проблема заключается в том, что каждый раз, когда я добавляю новый исходный файл в цель приложения, мне нужно также добавлять его в цель UnitTestUI. Это не имеет большого значения, просто неудобно всегда помнить о добавлении файлов в обе цели.

Есть ли способ настроить зависимость, чтобы каждый файл, добавленный к исходной цели приложения, автоматически добавлялся к цели модульного теста?

Ответы [ 3 ]

4 голосов
/ 05 января 2009

В Xcode вы можете создавать цели, которые напрямую зависят друг от друга. Существует ряд задач по созданию не продуктов, которые могут помочь с этим в категории Другое при добавлении новой цели, в зависимости от того, насколько проста или сложна ваша установка. Создание конкретных целей для запуска модульных тестов с прямой зависимостью от основной цели проекта очень распространено и задокументировано Apple и рядом блогов.

В вашей ситуации, однако, вам, возможно, придется много доработать новую цель тестирования пользовательского интерфейса, но как только она будет настроена, ее будет очень легко поддерживать. Не зная вашей точной ситуации, невозможно дать вам пошаговый ответ, но вот общие рекомендации (настройка в соответствии с вашей ситуацией):

  1. Создайте копию вашей исходной цели, поскольку большинство ваших настроек будут такими же.
  2. Выберите вашу новую цель и откройте инспектора (⌘I)
  3. В разделе Прямые зависимости , нажмите кнопку + и выберите свою основную цель.
  4. Установите новую цель по желанию, с дополнительной документацией / источником / правилами или чем-то еще.

Если вы предпочитаете перетаскивать объекты, вы также можете перетащить исходную цель (из-под треугольника раскрытия Targets ) в новую цель, и она автоматически установит зависимость.

Теперь выберите вашу цель тестирования в качестве активной цели, и она всегда будет строиться по этим правилам. Кроме того, если вы добавите / измените источник в основной цели, он будет правильно перестроен при создании цели тестирования ... не нужно также не забывать добавлять исходный файл в цель тестирования. Я предлагаю потратить некоторое время, чтобы прочитать различные документы по Xcode и поиграть со многими доступными целевыми шаблонами ... в конечном счете, это действительно помогает сделать продукт намного более эффективным. Есть много изящных вещей, которые можно сделать довольно легко в Xcode, если вы знаете, даже с очень большими или сложными проектами.

0 голосов
/ 09 декабря 2010

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

Цели в моем проекте выглядят так:

  • libMyApp
    • скомпилировать .m файлы
  • MyApp.app
    • libMyApp (зависимость)
    • Ссылка на библиотеку: libMyApp.a
  • UITest.app
    • libMyApp (зависимость)
    • Ссылка на библиотеку: libMyApp.a

Таким образом, я могу добавить .m файлы только к цели "libMyApp" и сделать их доступными как в приложении, так и в тестах, и их даже не нужно перекомпилировать.

Единственный недостаток в том, что статическая библиотека, похоже, не поддерживает категории Objective-C, поэтому мне все равно нужно добавлять их к каждой цели отдельно.

0 голосов
/ 05 января 2009

Нет, нет. Есть ли какая-то конкретная причина, по которой вы хотите, чтобы каждый файл в вашей цели модульного теста? Это будет включать main.m и все классы, которые вы не тестируете (например, ваши классы представления). На самом деле, если main.m включен в ваш модульный тест, то как ваш тест будет работать правильно?

...