Xcode 如何通过Swift项目中的测试访问我的应用程序代码?
我有一个Swift Xcode项目,代码如下:Xcode 如何通过Swift项目中的测试访问我的应用程序代码?,xcode,macos,cocoa,swift,testing,Xcode,Macos,Cocoa,Swift,Testing,我有一个Swift Xcode项目,代码如下: class Utils: NSObject { class func cleanString (input: String, trim: Bool) -> String { // ... } } 然后我试着测试它: import XCTest class AppTests: XCTestCase { func testConfiguratio() { Utils.cleanStrin
class Utils: NSObject {
class func cleanString (input: String, trim: Bool) -> String {
// ...
}
}
然后我试着测试它:
import XCTest
class AppTests: XCTestCase {
func testConfiguratio() {
Utils.cleanString("foo", trim: true)
}
}
但我得到了这个错误:
/Users/pupeno/Projects/macninja/AppTests/AppTests.swift:35:9: Use of unresolved identifier 'Utils'
我已启用主机应用程序API:
我缺少什么?包含测试的模块与包含应用程序代码的模块不同。当您想要访问包含在单独模块中的类时,您需要确保要导入的类被标记为
public
:
public class Utils: NSObject {
class func cleanString (input: String, trim: Bool) -> String {
// ...
}
}
如前所述,库代码和测试代码是两个不同的模块。因此,您必须将库导入测试代码,并将要测试的函数公开,例如:
public class Utils: NSObject {
public class func cleanString (input: String, trim: Bool) -> String {
// ...
}
}
及
如果您想查看工作代码,请查看哪些代码恰好实现了此场景(类函数、swift框架、大量测试)。如果这是一个OSX项目,请确保包括
@Testable import YOURPROJECTNAME
在“类AppTests:XCTestCase”之上并清理项目文件
希望这会有所帮助(即使一年后…确保在测试中也选中了
Utils
class复选框,即Target memebership虽然发生了很多变化,但这个答案仍然基本正确。现在,您可以在测试文件中使用“@testable import ModuleName”导入模块,并从正在测试的类定义中删除“public”关键字(如果它只是为了可测试性而添加的)
@Testable import YOURPROJECTNAME