Тестирование интерфейса означает, что вы должны тестировать только те элементы, которые доступны в открытом интерфейсе. Другими словами, не проверяйте личные вещи. Возьмите тестируемое устройство в виде черного ящика . Это делает тесты более удобными в обслуживании , потому что вы можете изменить детали реализации, не нарушая тесты. Тесты также покажут, для чего хорош ваш тестируемый модуль, а не то, как он реализован.
Проверка вызовов, сделанных для других объектов, называется «тест взаимодействия» (не путать с интеграционными тестами, в которых вы не издеваетесь над другими объектами). Тесты взаимодействия необходимы, когда тестируемое вами подразделение вызывает метод для другого объекта без зависимости от него . Я пытаюсь объяснить это на примере.
Необходимо проверить следующий метод:
public decimal CalculateTax(Order order);
Предположим, что этот метод должен вызывать
TaxRules TaxRuleProvider.GetRules(Country country)
, который возвращает некоторые локальные правила. Когда он не вызывает его, он не сможет вернуть правильный результат. Это пропустит жизненно важную информацию. Вам не нужно проверять, был ли он вызван, просто проверьте результат.
Другой метод:
public void StoreThingy(Thingy toBeStored);
будет звонить
public void NotificationBroker.NotifyChanges(SomeChanges x);
StoreThingy не зависит от уведомления. Вы не можете определить его интерфейс, отправлял ли он уведомления или нет. Вам нужно проверить это с помощью теста взаимодействия.
Обычно методы для тестов взаимодействия возвращают void
. В эту категорию входят все виды событий, а также уведомления и методы, такие как Commit()
.