我有一个简单的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,以便在我的模拟对象运行时能够在单元测试中返回我需要的值。
答案 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);
}
}