Интерфейсы поблочного тестирования и вызовы метода

Существует два сценария тестирования, на которых я неясен. Оба, кажется, на первый взгляд создают очень хрупкие тесты.

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

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

1
задан 2 revs 28 June 2010 в 21:26
поделиться

1 ответ

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

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

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

public decimal CalculateTax(Order order);

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

TaxRules TaxRuleProvider.GetRules(Country country)

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

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

public void StoreThingy(Thingy toBeStored);

Он вызовет

public void NotificationBroker.NotifyChanges(SomeChanges x);

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

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

2
ответ дан 2 September 2019 в 23:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: