Xcode 如何通过Swift项目中的测试访问我的应用程序代码?

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

我有一个Swift Xcode项目,代码如下:

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