Подтвердить что ты не робот

Xcode - тестовый класс Файл является частью модуля, игнорируя импорт

Итак, у меня есть проект iOS с тестами, и все работает нормально.

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

Через некоторое время обновление вещей для этого, наконец, будет работать, приложение работает нормально, но у меня все еще есть проблема.

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

Здесь мой тестовый класс (для вопроса я использую пример Foo)

@testable import MyApp // File FooTests is part of module MyApp. Ignoring import.

class FooTests: QuickSpec {

  override func spec() {

     describe("a foo test") {
         it("tests foo") {
             let return = Foo.barMethod()
             XCTAssertEqual(return, "expected", "Expected something, got \(return) instead")
         }
    }
 }

Класс Foo не распознается, и я получаю ошибку, что тестовый класс является частью MyApp, что не так.

Где я должен искать?

4b9b3361

Ответ 1

Я просто наткнулся на ту же проблему, и ваш пост был полезен. То, что я узнал, - это изменить Product Name на AppNameTests в соответствии с вашим примером, тогда имя модуля продукта будет правильно отображено, и вам не нужно добавлять Tests в конце $(PRODUCT_NAME:c99extidentifier). c99extidentifier кажется torefers до Product Name.

Резюме:

  • выберите целевую аудиторию в проекте
  • перейдите к Build Settings -> Packaging
  • измените Product Name на предыдущую тестовую цель, предположительно добавив Tests
  • Я считаю, что переименование по Apple, переименовав проект, не включает обновление модуля в @testable, поэтому мне пришлось сделать это вручную

Ответ 2

[UPTADE] Это помогло Жан-Фредерику выяснить его ответ. Вот почему я принял это.

Наконец-то мне удалось это исправить, но я не доволен решением.

Рассмотрим мое имя приложения AppName

По какой-то странной причине я не могу объяснить, у моей тестовой цели Build Settings -> Product Module Name было $(PRODUCT_NAME:c99extidentifier), значение которой было AppName, а не AppNameTests. Я проверил с другими проектами, и значение одно и то же, но преобразовано в AppNameTests, поэтому в этом случае я не уверен, что могу сделать, чтобы оно автоматически обновлялось и включало тестовую часть в имя.

В итоге я установил имя как $(PRODUCT_NAME:c99extidentifier)Tests. Не уверен, что это подходящее решение, но пока оно работает.

Если у кого-то есть лучшее решение, не стесняйтесь делиться.

Ответ 3

Это прямо параллельное решение для Jean-Frederic Plante, хотя в моем случае проблема заключалась не в том, что мое тестовое целевое имя соответствовало моей основной цели, а скорее, что модуль тестовой цели неправильно настроен на соответствие модулю имя главной цели приложения. Чтобы исправить любую из этих проблем:

  • Выберите целевую аудиторию в своем проекте.
  • Перейдите в "Настройки сборки" > "Упаковка".
  • Убедитесь, что для имени модуля продукта и имени продукта установлено значение $(TARGET_NAME).