Я прочитал книгу TDD iOS Development и у меня возникло ощущение, что я не понимаю разницы между поддельными / заглушками / шпионскими / поддельными словами.
Вот пример кода из этой книги:
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)
}
}
}
Здесь у нас есть фиктивное представление таблицы, но если мы читаем Мартин Фаулер, который говорит следующее :
- Пустые объекты передаются вокруг, ноникогда не использовался.Обычно они просто используются для заполнения списков параметров.
- Поддельные объекты на самом деле имеют рабочие реализации, но обычно используют некоторые ярлыки, которые делают их непригодными для производства (хороший пример - база данных в памяти).).
- Заглушки обеспечивают постоянные ответы на вызовы, сделанные во время теста, обычно вообще не реагируя ни на что, кроме того, что запрограммировано для теста.
- Шпионы - это заглушки, которые также записывают некоторую информацию в зависимости от того, как они были вызваны.Одной из форм этого может быть служба электронной почты, которая записывает, сколько сообщений было отправлено.
- Моксы - это то, о чем мы здесь говорим: объекты, предварительно запрограммированные с ожиданиями, которые формируют спецификациюожидаемые вызовы.
Но этот MockTableView не похож на Mock.Для меня это выглядит как шпион, потому что у него совсем нет ожиданий, но все же у него есть некоторая информация для записи.
Что такое TableView здесь Mock или Spy или что-то еще?