Модульное тестирование интерфейсов и вызовов методов - PullRequest
1 голос
/ 29 июня 2010

Есть два сценария тестирования, по которым мне неясно.И то, и другое появляется на первый взгляд для создания очень хрупких тестов.

Во-первых, когда один модуль должен проверить интерфейс (т. Е. Убедиться, что интерфейс имеет заданную подпись)?

Во-вторых, когда следует "«Проверить диаграмму последовательности» (термин, который я только что придумал) - что означает, что проверяются вызовы для соответствующих объектов?

1 Ответ

2 голосов
/ 29 июня 2010

Тестирование интерфейса означает, что вы должны тестировать только те элементы, которые доступны в открытом интерфейсе. Другими словами, не проверяйте личные вещи. Возьмите тестируемое устройство в виде черного ящика . Это делает тесты более удобными в обслуживании , потому что вы можете изменить детали реализации, не нарушая тесты. Тесты также покажут, для чего хорош ваш тестируемый модуль, а не то, как он реализован.

Проверка вызовов, сделанных для других объектов, называется «тест взаимодействия» (не путать с интеграционными тестами, в которых вы не издеваетесь над другими объектами). Тесты взаимодействия необходимы, когда тестируемое вами подразделение вызывает метод для другого объекта без зависимости от него . Я пытаюсь объяснить это на примере.

Необходимо проверить следующий метод:

public decimal CalculateTax(Order order);

Предположим, что этот метод должен вызывать

TaxRules TaxRuleProvider.GetRules(Country country)

, который возвращает некоторые локальные правила. Когда он не вызывает его, он не сможет вернуть правильный результат. Это пропустит жизненно важную информацию. Вам не нужно проверять, был ли он вызван, просто проверьте результат.

Другой метод:

public void StoreThingy(Thingy toBeStored);

будет звонить

public void NotificationBroker.NotifyChanges(SomeChanges x);

StoreThingy не зависит от уведомления. Вы не можете определить его интерфейс, отправлял ли он уведомления или нет. Вам нужно проверить это с помощью теста взаимодействия.

Обычно методы для тестов взаимодействия возвращают void. В эту категорию входят все виды событий, а также уведомления и методы, такие как Commit().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...