为什么我不能使用 Xcode 测试基本的多平台应用程序?

Why can't I test a basic Multiplatform app with Xcode?

我用 Xcode 创建了一个名为 Tester 的新多平台应用程序,然后添加了一个超级简单的 class:

class Transaction {
    var time = "1"
}

在 Tests_iOS 我有这个:

import XCTest
@testable import Tester

class Tests_iOS: XCTestCase {
    func testExample() throws {
        let t = Transaction()
        XCTAssertEqual(t.time, "1")
    }
}

应用程序编译,但是当我尝试 运行 测试时,编译失败并出现此错误:

Undefined symbols for architecture arm64:
  "type metadata accessor for Tester.Transaction", referenced from:
      Tests_iOS.Tests_iOS.testExample() throws -> () in Tests_iOS.o
  "Tester.Transaction.__allocating_init() -> Tester.Transaction", referenced from:
      Tests_iOS.Tests_iOS.testExample() throws -> () in Tests_iOS.o
ld: symbol(s) not found for architecture arm64

我做错了什么?这是在 M1 Mac 上使用 Xcode 13.3

问题很可能是您已将测试添加到创建新 multi-platform 项目时自动创建的测试目标,并且该目标是 UI 测试目标而不是普通单元测试目标。

对于这些测试,您不像交易 class 那样访问应用程序的 public api,而是访问 UI 组件,因此测试框架无法访问交易 class.

解决方案是创建一个新的单元测试目标,文件 -> 新建 -> 目标...和 ​​select 单元测试(记住 select 正确的平台,因为这需要为每个支持的平台单独完成)。

完成后,将您的测试移动到新目标或将其复制到生成的测试文件中,您的测试将构建并且 运行。