@testable 导入出现奇怪的编译错误
Strange compilation error with @testable import
我刚刚向新项目添加了一些单元测试。通常我使用 @testable import
导入生产代码,所以我可以测试非 public 方法:
@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'
我已经检查并仔细检查了所有内容,但无法弄清楚为什么会产生此编译错误。
我错过了什么?
项目名称(以及内部模块名称)包含破折号 (-)。
解决这个问题:
- Select Xcode 项目导航器中的顶级项目文件图标
- 按回车重命名项目
- 从项目名称中删除破折号
- 按照提示进行最后的重构
- 更新您的
@testable import ...
声明以反映新模块名称。
项目和目标名称可以包含特殊字符(如空格或破折号),但模块名称不能。默认情况下,Xcode 通过用下划线替换无效字符从目标名称生成模块名称。
因此,在你的情况下
@testable import My_Project
会解决这个问题。或者,在目标的构建设置中指定一个自定义的“产品模块名称”。
无需重命名整个项目(或目标)。
我刚刚向新项目添加了一些单元测试。通常我使用 @testable import
导入生产代码,所以我可以测试非 public 方法:
@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'
我已经检查并仔细检查了所有内容,但无法弄清楚为什么会产生此编译错误。
我错过了什么?
项目名称(以及内部模块名称)包含破折号 (-)。
解决这个问题:
- Select Xcode 项目导航器中的顶级项目文件图标
- 按回车重命名项目
- 从项目名称中删除破折号
- 按照提示进行最后的重构
- 更新您的
@testable import ...
声明以反映新模块名称。
项目和目标名称可以包含特殊字符(如空格或破折号),但模块名称不能。默认情况下,Xcode 通过用下划线替换无效字符从目标名称生成模块名称。
因此,在你的情况下
@testable import My_Project
会解决这个问题。或者,在目标的构建设置中指定一个自定义的“产品模块名称”。
无需重命名整个项目(或目标)。