使用override func的嵌套类的编译器错误 - Swift Xcode6

时间:2014-10-02 16:20:57

标签: swift xcode6

我有一个简单的Cocoa Touch Framework项目,只有Swift代码。在我的单元测试类中,我想做模拟,所以我创建了一个继承自我想要模拟的类型的模拟类:

func testFirstClassMocking() {
    class MockSecondClass: SecondClass {
        var mockedResult = "My mocked value"
        override func printSecondLogEntry(logEntry: String) -> String {

            return mockedResult
        }
    }

    let mock = MockSecondClass()

    var firstClass = FirstClass(secondClass: mock)

    let result = firstClass.printFirstLogEntry("whatever")

    XCTAssertEqual("My mocked value", result);
}

这导致一般编译器错误:

Command /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swiftc failed with exit code 1

现在,当我从函数中取出嵌套类并在我的测试类中嵌套时 - 一切都很棒。代码编译和我的单元测试运行良好。类不允许嵌套在函数中吗?

我的Xcode版本:版本6.0.1(6A317)

编辑:另一件事 - 如果我删除了func的覆盖 - 编译器没有问题。显然,我需要override func,以便在我的模拟对象运行时能够在单元测试中返回我需要的值。

1 个答案:

答案 0 :(得分:1)

我想你可能想知道以下' mock'您的模拟测试正在编译和传递。如果我错过了您的代码,那么请告诉我。但是,如果我没有错过任何内容,那么错误的原因就是您的代码没有提到问题。希望能帮助你找到罪魁祸首或重新提出问题:

import XCTest

class FirstClass {

    let secondClass: SecondClass

    init(secondClass: SecondClass) {
        self.secondClass = secondClass
    }

    func printFirstLogEntry(entry: String) -> String {
        var fullLog = self.secondClass.printSecondLogEntry(entry)
        return fullLog
    }
}
class SecondClass {

    func printSecondLogEntry(logEntry: String) -> String {
        return logEntry
    }
}

class CommandLineTests: XCTestCase {

    func testFirstClassMocking() {
        class MockSecondClass: SecondClass {
            override func printSecondLogEntry(logEntry: String) -> String {
                return logEntry
            }
        }

        let mock = MockSecondClass()

        var firstClass = FirstClass(secondClass: mock)

        let result = firstClass.printFirstLogEntry("whatever")

        XCTAssertEqual("whatever", result);
    }
}