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
, что не так.
Где я должен искать?
Ответы
Ответ 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)
.