【问题标题】:Strange compilation error with @testable import@testable import 出现奇怪的编译错误
【发布时间】:2019-05-13 13:23:26
【问题描述】:

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

我已经检查并仔细检查了所有内容,但无法弄清楚为什么会产生此编译错误。

我错过了什么?

【问题讨论】:

    标签: ios swift xctest


    【解决方案1】:

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

    因此,在你的情况下

    @testable import My_Project
    

    会解决这个问题。或者,在目标的构建设置中分配一个自定义“产品模块名称”。

    无需重命名整个项目(或目标)。

    【讨论】:

      【解决方案2】:

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

      解决这个问题:

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

      【讨论】:

        猜你喜欢
        • 2013-02-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多