当前位置 : 主页 > 手机开发 > 其它 >

快速嘲笑使用final

来源:互联网 收集:自由互联 发布时间:2021-06-11
为了测试 swift对象,从我读过的内容中,我们对它们进行子类化并模拟我们想要的方法返回我们的测试值.然后,我观看了一个关于快速性能的WWDC视频,并且演示者建议将类标记为最终,以帮助
为了测试 swift对象,从我读过的内容中,我们对它们进行子类化并模拟我们想要的方法返回我们的测试值.然后,我观看了一个关于快速性能的WWDC视频,并且演示者建议将类标记为最终,以帮助编译器决定如何调用方法,从我看到添加final的示例可以提供帮助.

我遇到的问题如何将类标记为final,但仍然允许子类模拟?有没有人真正遇到这个问题或者我应该从我的声明中删除最后一个关键字?

任何建议都很棒,或者没有任何建议可以告诉我,我做得不对.

谢谢,
麦克风.

我知道这个帖子有点旧,但我想我还是会发表评论.你的另一个选择是面向协议.在协议中定义最终类的公共接口,并使最终类实现该协议.然后,您所要做的就是模拟协议,您的课程将保持最终状态.这为您提供静态调度和模拟.我不确定这是否是本身最好的选项,但它是我在框架构建中使用的那个,这样我们就可以测试我们的框架代码,同时为消费应用程序提供优化的二进制文件.

internal protocol MockableProtocol {
    func deleteItem(_ itemId: String) -> Bool
    func fetchAllItems() -> [CustomObject]
    func fetchItem(for id: String) -> CustomObject?
}
internal final class MyFinalClass: MockableProtocol {
    func deleteItem(_ itemId: String) -> Bool {
        // Your code here
    }

    func fetchAllItems() -> [CustomObject] {
        // Your code here
    }

    func fetchItem(for id: String) -> CustomObject? {
        // Your code here
    }
}

然后在测试中:

class TestMockClass: MockableProtocol {
    func deleteItem(_ itemId: String) -> Bool {
        // Your code here
    }

    func fetchAllItems() -> [CustomObject] {
        // Your code here
    }

    func fetchItem(for id: String) -> CustomObject? {
        // Your code here
    }
}
网友评论