swift - 将 Cuckoo 与 Swift 一起使用,为什么调用 `stub` 会提示来自 GeneratedMocks 的类不符合 Mock 协议(protocol)?

标签 swift unit-testing mocking

使用 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.swiftMockDeepFileManager 的声明:

 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/

相关文章:

database - Swift - 从数据库中删除单条记录

ios - 纯代码构建集合但不执行 UICollectionViewDelegateFlowLayout

php - 为什么数组会保留重复数据

unit-testing - PHPUnit 本身的错误

python - python 3.1 中的测试驱动开发

mocking - BDD 和模拟框架的哪种组合可以与 Team Build 门控 checkin 一起使用?

ios - 如何从分组条形图切换到简单条形图

javascript - enzyme /Jest : How to test if mocked function has been called

python - 是否可以编写将模拟装饰器应用于函数的函数级 pytest fixture ?

ios - 如何在 Mapkit Swift 中随机放置注释