gpt4 book ai didi

swift - 使用 Swift 测试可执行文件

转载 作者:搜寻专家 更新时间:2023-10-31 19:28:49 26 4
gpt4 key购买 nike

我通过 swift package init --type executable 使用 Swift 创建了一个可执行文件,现在想为它编写一些测试。对于库包来说,这似乎根本不是问题,在这种情况下,Swift 还使用测试模块填充了 Tests 目录,该模块通过 swift test 运行良好。对于可执行文件,只会创建一个空的 Tests 目录。

在尝试从 Xcode 中或通过 swift test 为我的可执行文件运行测试时,我遇到了链接器问题,尽管这似乎表明 Swift 无法链接我的 main.swift 的内容到测试。我不确定我能在这里做什么。我已经尝试在 Xcode 中尝试创建要链接的新框架目标,但据我所知,无论如何 swift test 都不会选择这些目标。我也没有设法让它通过 Xcode 工作。以下是 swift 测试的输出。

Compile Swift Module 'swifttest' (1 sources)
Linking ./.build/debug/swifttest
Compile Swift Module 'swifttestTests' (1 sources)
Linking ./.build/debug/swifttestPackageTests.xctest/Contents/MacOS/swifttestPackageTests
Undefined symbols for architecture x86_64:
"__TF9swifttest3fooFT_SS", referenced from:
__TFFC14swifttestTests14SwifttestTests7testFooFT_T_u0_KzT_SS in swifttestTests.swift.o
ld: symbol(s) not found for architecture x86_64
<unknown>:0: error: link command failed with exit code 1 (use -v to see invocation)
<unknown>:0: error: build had 1 command failures
error: exit(1): /Applications/Xcode-beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift-build-tool -f /Users/kilian/Desktop/swifttest/.build/debug.yaml test

这些是我的文件内容,供引用。这是一个最小的示例项目。

ma​​in.swift

public func foo() -> String {
return "bar"
}

print(foo())

swifttestTests.swift

import Foundation
import XCTest
import swifttest

class SwifttestTests: XCTestCase {
func testFoo() {
XCTAssertEqual("bar", foo())
}
}

目录布局

.
├── Package.swift
├── Sources
│   └── main.swift
└── Tests
└── swifttestTests
└── swifttestTests.swift

最佳答案

虽然不能完全解决无法测试可执行文件的问题,但我知道了一个解决方法。基本思想是将或多或少的所有内容移动到同一项目内的第二个模块中,并将可执行目标最小化为对入口函数的调用。

给定示例之后的基本结构如下所示:

.
├── Package.swift
├── Sources
│ └── swifttest
│ │ └── main.swift
│ └── SwiftTestLib
│ └── foo.swift
└── Tests
└── SwiftTestLibTests
└── SwiftTestLibTests.swift

然而,这使得有必要在 Package.swift 中指定目标。

import PackageDescription

let package = Package(
name: "swifttest",
targets: [
Target(name: "swifttest", dependencies: ["SwiftTestLib"]),
Target(name: "SwiftTestLib", dependencies: []),
],
dependencies: []
)

关于swift - 使用 Swift 测试可执行文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42767700/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com