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
это не так.
Где я должен искать?
Я просто наткнулся на ту же проблему, и ваш пост был полезен. То, что я узнал, – это изменить имя Product Name
на AppNameTests
, в соответствии с вашим примером, тогда имя модуля продукта правильно отражено, и вам не нужно добавлять Tests
в конце $(PRODUCT_NAME:c99extidentifier)
. c99extidentifier
похоже, относится к Product Name
.
Резюме:
- выберите целевую аудиторию в проекте
- перейдите в «
Build Settings -> Packaging
- измените имя
Product Name
на предыдущую тестовую цель, вероятно, добавивTests
- Я считаю, что переименование в соответствии с переименованием Apple проекта не включает обновление модуля в
@testable
, поэтому мне пришлось сделать это вручную
[UPTADE] Это помогло Жан-Фредерику выяснить его ответ. Вот почему я принял это.
Наконец, мне удалось это исправить, но я не доволен решением.
Рассмотрим мое имя приложения AppName
По какой-то странной причине я не могу объяснить, моя тестовая цель Build Settings -> Product Module Name
имела $(PRODUCT_NAME:c99extidentifier)
значение которой было Appname
, а не AppNameTests
. Я проверил с другими проектами, и значение одно и то же, но преобразовано в AppNameTests
поэтому в этом случае я не уверен, что могу сделать, чтобы оно автоматически обновлялось и включало тестовую часть в имя.
То, что я закончил, это установить имя как $(PRODUCT_NAME:c99extidentifier)Tests
. Не уверен, что это подходящее решение, но пока оно работает.
Если у кого-то есть лучшее решение, пожалуйста, не стесняйтесь делиться.