Зависимость сама по себе не является ожидаемым поведением, но, скорее всего, действия, вызываемые над зависимостью. Вы должны проверить материал, о котором вы (вызывающий), знаете, и избегать тестирования материала, который требует от вас глубоких знаний о внутренней работе SUT.
Немного расширив ваш пример, давайте представим, что наш LinkStorageInterface имеет следующее определение (псевдокод):
Interface LinkStorageInterface
void WriteListToPersistentMedium(LinkList list)
End Interface
Теперь, так как вы (вызывающая сторона) предоставляете конкретную реализацию для этого интерфейса, вполне разумно проверить, вызывается ли WriteListToPersistentMedium()
при вызове метода Save()
в LinkList
.
.
Тест может выглядеть следующим образом, снова с использованием псевдокода:
void ShouldSaveLinkListToPersistentMedium()
define da = new MockLinkListStorage()
define list = new LinkList(da)
list.Save()
Assert.Method(da.WriteListToPersistentMedium).WasCalledWith(list)
end method
Вы проверили ожидаемое поведение, не проверяя специфичные для реализации детали вашей SUT или вашего макета. То, что вы хотите избежать тестирования (в основном) такие вещи:
- Порядок, в котором были вызваны методы
- Создание метода или свойства общедоступным, чтобы вы могли проверить его
- Все, что напрямую не связано с ожидаемым поведением, которое вы тестируете
Опять же, зависимость - это то, что вы, как потребитель класса, предоставляете, так что вы ожидаете, что она будет использоваться. Иначе нет смысла иметь эту зависимость в первую очередь.