间谍或模拟或其他..TableView?

时间:2018-10-18 09:13:18

标签: ios swift mocking stub

我读了《 TDD iOS开发》一书,感觉不明白假/存根/间谍/模拟词之间的区别。

这是本书中的代码示例:

ItemListDataProviderTests class:
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)
        }
    }
}

这里我们有模拟表视图,但是如果我们读Martin Fowler, which say next

  • 虚拟对象被传递但从未实际使用过。通常它们仅用于填充参数列表。
  • 伪造对象实际上具有有效的实现,但是通常采取一些捷径,这使其不适用于生产(内存数据库是一个很好的例子)。
  • 存根为测试期间进行的呼叫提供罐装答案,通常不会对测试中编程的内容做出任何反应。
  • 间谍是存根,它们还会根据调用方式记录一些信息。其中一种形式可能是电子邮件服务,它记录发送了多少消息。
  • 模拟是我们在这里所说的:预编程并带有期望的对象,这些对象构成了期望接收的呼叫的规范。

但是,这个MockTableView看起来并不像Mock。对我来说,它看起来像是间谍,因为它根本没有期望,但仍然需要记录一些信息。

这里的TableView是模拟还是间谍或其他东西?

0 个答案:

没有答案