使用 Cuckoo 1.4.1,出现错误
Global function 'stub(_:block:)' requires that 'DeepFileManager' conform to 'Mock'
我不知道如何继续,因为传递给 stub
函数的实例是从 GeneratedMocks.swift
中的类创建的。对 DeepFileManager
的引用是被模拟的类。
所以我很困惑为什么 Swift 4 会提示我传递给它的实例的父类(super class)的一致性。你能带我走出这个难题吗?
测试代码如下:
class RecordingTests: QuickSpec {
override func spec() {
let FAKE_ID = "String";
let mockFileManager: MockDeepFileManager = MockDeepFileManager()
let cut = Recording(id: FAKE_ID, date: nil, status: nil, device: nil, deviceId: nil, deviceName: nil, fileManager: mockFileManager)
describe("A recording") {
context("when it's not on disk") {
it("responds that filePresent is false") {
stub(mockFileManager) {stub in
when(stub.fileExists(audioId: FAKE_ID)).then()
}
expect(cut.filePresent()).to(equal(false))
verify(mockFileManager).fileExists(audioId: "Matchable")
}
}
}
}
下面是 GeneratedMocks.swift
中 MockDeepFileManager
的声明:
class MockDeepFileManager: DeepFileManager, Cuckoo.ClassMock {
最佳答案
如评论中所述,针对包提交了一个问题,response explains如何让它发挥作用。
代码中的问题是调用 then()
(没有参数),因为 then
需要一个带有签名的闭包函数来匹配 stub 函数的签名. thenReturn
(而不是 then
)可以实现该目标,这是一个更简单的替代方案,它只需要一个 stub 函数返回类型的值。
Cuckoo 包的维护者对 Swift 发出有关协议(protocol)的错误表示同情,而是指出调用 then
时的错误。
关于swift - 将 Cuckoo 与 Swift 一起使用,为什么调用 `stub` 会提示来自 GeneratedMocks 的类不符合 Mock 协议(protocol)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65672067/