我从命令行运行swift test来运行测试用例。这是测试用例:
import XCTest
@testable import vnk_swift
class KeyMappingTests: XCTestCase {
static var allTests : [(String, (KeyMappingTests) -> () throws -> Void)] {
return [
// ("testExample", testExample),
]
}
func testExample() {
let keyMapping = KeyMapping()
XCTAssertNotNil(keyMapping , "PASS")
}
}这是输出消息。

如果我删除了KeyMapping的用法,那么一切都很好:
func testExample() {
// let keyMapping = KeyMapping()
XCTAssertNotNil(true , "PASS")
}

当我尝试使用一个类时,看起来有一个问题。如何解决这个问题?
(当我从swift package init__开始时,我没有为这个项目使用Xcode,这个项目的源代码在这里:https://github.com/trungdq88/vnk-swift)
发布于 2017-01-01 10:36:41
通过执行以下修改,我成功地构建和测试了您的包:
VnkSwift,因为某些原因,构建工具不喜欢包名中的破折号,在生成的包名中有下划线时也不起作用(因此将包重命名为vnk_swift以确保导入语句和包名匹配无效)VnkSwiftTests,以便链接器知道链接指向什么;这似乎是链接器知道链接到包的前提条件。main.swift重命名为其他东西(我使用了utils.swift)。问题是,main.swift的存在指示构建工具生成可执行文件,而针对可执行文件的链接工作得不太好。重命名后,必须注释if代码,因为全局运行的代码只能属于main.swift。最后:
main.swift文件,以确保包可以链接到为什么不能针对可执行文件进行单元测试目标链接?
这是因为测试包和可执行包都有全局执行代码(也就是主函数),所以链接器不知道要选择哪一个代码。当从Xcode进行测试时,测试包会运行到应用程序的上下文中--它不会链接到它,就像这里的情况一样。
Xcode在创建命令行工具时也存在这个问题--不能对目标进行单元测试,如果要对代码进行单元测试,则必须创建一个库,该库将由工具和单元测试目标链接(或将文件包含在两个目标中)。
发布于 2017-01-31 11:53:30
这似乎是导致我在模块目录中有一个main.swift的原因。这将导致生成可执行文件,而不是可以链接测试用例的库。
我通过将代码分成两个模块来解决这个问题。一个只包含main.swift的测试用例和应用程序的库。
Package.swift
Sources\FooBarLib\
Sources\FooBarLib\Something.swift
Sources\FooBarLib\MoreStuff.swift
Sources\FooBarApp\main.swift
Tests\FooBarLibTests\TestSomething.swift然后在我的Package.swift中确保FooBarApp依赖于FooBarLib
import PackageDescription
let package = Package(
name: "FooBar",
targets: [
.target(name: "FooBarLib"),
.target(name: "FooBarApp", dependencies: ["FooBarLib"])
],
)然后在TestSomething.swift中导入FooBarLib模块:
@testable import FooBarLib
import XCTest
class TestSomething: XCTestCase {
func testFunc() {
}
}发布于 2018-02-13 08:57:36
在Swift 4中,检查您的.testTarget是否依赖于FooBarLib。
.testTarget(
name: "FooBarLibTests",
dependencies: ["FooBarLib"]),https://stackoverflow.com/questions/41322034
复制相似问题