我有一个仅包含 Swift 代码的简单 Cocoa Touch Framework 项目。在我的单元测试类中,我想进行模拟,所以我创建了一个模拟类,它继承了我想要模拟的类型:
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 的覆盖 - 编译器没有问题。显然,当我的模拟对象运行时,我需要覆盖函数才能返回我在单元测试中需要的值。
最佳答案
我想您可能想知道模拟测试的以下“模拟”正在编译并通过。如果我遗漏了您的代码的某些内容,请告诉我您的问题中的内容。但是,如果我没有遗漏任何内容,那么错误的原因就是您的代码没有引起问题。希望这可以帮助您找到罪魁祸首或重新提出问题:
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);
}
}
关于swift - 具有覆盖功能的嵌套类的编译器错误 - Swift Xcode6,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26165104/