Ios Swift嵌套类作为mock

Ios Swift嵌套类作为mock,ios,swift,xctest,Ios,Swift,Xctest,我想在Swift中使用嵌套类进行模拟。想象一下下面的Foo类的bar()方法正在测试中: class Foo: NSObject { func baz() -> String { return "baz" } func bar() -> String { return self.baz().stringByReplacingOccurrencesOfString("z", withString: "r") } } 我

我想在Swift中使用嵌套类进行模拟。想象一下下面的
Foo
类的
bar()
方法正在测试中:

class Foo: NSObject {
    func baz() -> String {
        return "baz"
    }

    func bar() -> String {
        return self.baz().stringByReplacingOccurrencesOfString("z", withString: "r")
    }
}
我想模拟
baz()
方法,并通过以下测试验证
bar()
是否依赖于它:

class FooTests: XCTestCase {
    func testBar() {
        class FooMock: Foo {
            override func baz() -> String {
                return "zzz"
            }
        }

        let mock = FooMock()
        let result = mock.bar()

        XCTAssertEqual("rrr", result)
    }
}
我已将
Foo
类添加到应用程序和测试目标中,以绕过测试目标的访问修饰符问题

应用程序无法编译,错误如下:

Global is external, but doesn't have external or weak linkage!
%4* (%0*, i8*)* @_TToFCFC13TestTestTests8FooTests7testBarFS0_FT_T_L_7FooMock3bazfS1_FT_SS
invalid linkage type for function declaration
%4* (%0*, i8*)* @_TToFCFC13TestTestTests8FooTests7testBarFS0_FT_T_L_7FooMock3bazfS1_FT_SS
LLVM ERROR: Broken module found, compilation aborted!
FooMock
移动到单独的源文件后,它会编译并正常工作

当使用嵌套类模拟iOS标准框架中的任何方法时,它工作得很好:

func testMockDefaults() {
    class NSUserDefaultsMock: NSUserDefaults {
        override func objectForKey(defaultName: String) -> AnyObject? {
            return "Super secret!"
        }
    }

    let defaults = NSUserDefaultsMock(suiteName: "SuiteName")!
    defaults.setObject("Test", forKey: "Test")
    let result = defaults.objectForKey("Test") as String

    XCTAssertEqual("Super secret!", result)
}
你能解释一下我错过了什么,这背后的原因是什么吗