Странная ошибка компиляции с @testable import - PullRequest
1 голос
/ 13 мая 2019

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

@testable import My-Project
import XCTest

final class MyTests: XCTestCase {
   func testOne() {
       // ...
   }
}

Однако я вижу странные ошибки компиляции, которых я никогда раньше не видел:

Tests.swift:1:25: Consecutive statements on a line must be separated by ';'
Tests.swift:1:25: Expected expression after unary operator
Tests.swift:1:25: Expressions are not allowed at the top level
Tests.swift:1:18: No such module 'My'

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

Чего мне не хватает?

Ответы [ 2 ]

2 голосов
/ 13 мая 2019

Имена проектов и целей могут содержать специальные символы (например, пробелы или тире), но имена модулей не могут. По умолчанию Xcode генерирует имя модуля из целевого имени, заменяя недопустимые символы подчеркиванием.

Следовательно, в вашем случае

@testable import My_Project

исправит проблему. В качестве альтернативы назначьте пользовательское «Имя модуля продукта» в настройках сборки целевого объекта.

Нет необходимости переименовывать весь проект (или цель).

0 голосов
/ 13 мая 2019

Имя проекта (и, следовательно, имя внутреннего модуля) содержит символ тире (-).

Чтобы исправить это:

  1. Выберите значок файла проекта верхнего уровня в XcodeНавигатор проектов
  2. Нажмите клавишу ввода, чтобы переименовать проект
  3. Удалить дефис из имени проекта
  4. Следуйте инструкциям, чтобы выполнить окончательный рефакторинг
  5. Обновите @testable import ... заявление, чтобы отразить новый модуль NAM.
...