【问题标题】:Calling super from a mock in Swift从 Swift 的模拟中调用 super
【发布时间】:2017-01-12 19:22:25
【问题描述】:

我正在关注 Swift 中的一个示例模拟,它在调用我们正在测试的函数时将变量设置为 true,但我不清楚的是,我们似乎覆盖了子类中的函数,即模拟,然后我们返回其父级对该方法的再现。我假设覆盖的工作方式是我们用我们想要的逻辑重写函数,当我们这样做时,我假设包含原始函数的父类完全不知道子类如何处理函数?

这里是示例代码:

extension ItemListDataProviderTests{
class MockTableView: UITableView {
    var cellGotDequeued = false


    override func dequeueReusableCell(withIdentifier identifier: String, for indexPath: IndexPath) -> UITableViewCell {

        cellGotDequeued = true

        return super.dequeueReusableCell(withIdentifier: identifier, for: indexPath)

    }
}

返回父方法如何调用被覆盖的函数并将测试变量设置为true?我假设通过调用 super 它将运行父级的逻辑并且不会触发子级的覆盖方法。

【问题讨论】:

  • 我想,我知道这段代码。 :) 太棒了!
  • 确实!第二次阅读您的书,通过编写测试更好地理解 OOP,非常好。

标签: ios swift xctest


【解决方案1】:

你展示的方法

  1. cellGotDequeued 设置为true
  2. 调用父类的实现dequeueReusableCell
  3. 返回从父类的实现返回的结果(不是“父类的方法再现”)

您是正确的,父类不知道子类如何覆盖此方法。

调用super 确实会调用父类的实现,但会在子类实现期间这样做,并且绝不会阻止子类的实现执行。子类对super 的使用决定了是否应该调用父实现,如果是,是否应该在之前或之后执行任何其他操作。

【讨论】:

    猜你喜欢
    • 2015-11-20
    • 1970-01-01
    • 2016-06-24
    • 2018-02-08
    • 1970-01-01
    • 1970-01-01
    • 2012-08-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多