使用@testable import时出现奇怪的编译错误

3

我刚刚为一个新项目添加了一些单元测试。通常我使用 @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个回答

3

项目和目标名称可以包含特殊字符(例如空格或破折号),但模块名称不能。默认情况下,Xcode通过将无效字符替换为下划线来从目标名称生成模块名称。

因此,在您的情况下

@testable import My_Project

可以修复这个问题。或者在目标的构建设置中分配自定义的“产品模块名称”。

没有必要重新命名整个项目(或目标)。


0

项目名称(因此内部模块名称)包含破折号(-)字符。

为了解决这个问题:

  1. 在Xcode项目导航器中选择顶层项目文件图标
  2. 按Enter键重命名项目
  3. 从项目名称中删除破折号
  4. 按提示进行最终的重构
  5. 更新您的@testable import ...语句以反映新的模块名称。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接