При тестировании на выброшенное исключение, сколько об этом исключении я должен проверить? - PullRequest
4 голосов
/ 02 марта 2012

Это соответствует моему поверхностному пониманию рекомендаций по обработке исключений.

Если я пишу модульные тесты для тестовых случаев, которые выдают исключения, мне нужно только заботиться о том, чтобы правильное исключение type был брошен, или я должен проверять больше?В частности:

  1. Если я вызываю метод и ожидаю исключение NullReferenceException, должен ли я проверить это исключение и убедиться, что оно пришло от того места, откуда я ожидаю?

  2. Если выдается исключение, следует ли мне немедленно больше не заботиться о состоянии или все еще допустимо делать утверждения о состоянии системы?

  3. ЕслиЯ передаю значения null в метод, и генерируется исключение NullArgumentException, меня интересует, какой аргумент он выбрасывает или только то, что он был выдан?

В настоящее время я считаю, чтоПосле выдачи исключения все ставки отключаются с точки зрения состояния системы, и копание вглубь исключений является плохим, поскольку в этот момент вы начинаете проверять, как реализован ваш метод.

спасибо,
Mark

Ответы [ 2 ]

4 голосов
/ 02 марта 2012

Если я пишу модульные тесты для тестовых случаев, которые выдают исключения, меня интересует только то, что был выдан правильный тип исключения, или я должен проверять больше?

Если вы рассматриваете тестирование как нечто, определяющее дизайн вашего приложения - вам нужно проверить все, что имеет смысл для дальнейшего класса клиента.

Если я вызываю метод и ожидаю исключение NullReferenceException, должен ли я проверить это исключение и убедиться, что оно пришло от того места, откуда я ожидал?

В тестах вы всегда проверяете, достигли ли вы известных результатов желаемых результатов. Итак, вы вызываете метод и ловите исключение. Вы не должны заботиться о том, что и как его бросили - вы просто в порядке с тем фактом, что он был брошен.

Если выдается исключение, следует ли мне немедленно больше не заботиться о состоянии или все еще допустимо делать утверждения о состоянии системы?

Это зависит от требований. Если ваше приложение / библиотека должно работать после обработки исключений и имеет действительное состояние - вы должны проверить это.

Если я передаю значения null в метод, и генерируется исключение NullArgumentException, меня интересует, какой аргумент он выбрасывает или только то, что он был выброшен?

Предположим, ваша библиотека как черный ящик. Вы передаете что-то там, вы получаете что-то обратно. Не имеет значения, как были получены результаты. Неважно, что было произведено.

UPD

как упомянуто в комментариях @eschneider - вы также должны проверить, что выброшенное исключение имеет правильный тип.

1 голос
/ 02 марта 2012

Если я вызываю метод и ожидаю исключение NullReferenceException, должен ли я проверить это исключение и убедиться, что оно пришло от того места, откуда я ожидал?

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

Если выброшено исключениеДолжен ли я сразу больше не заботиться о состоянии, или все еще допустимо делать утверждения о состоянии системы?

Это полностью соответствует вашим требованиям.Если состояние после исключительной ситуации нужно каким-то образом обрабатывать , то вам определенно следует написать тесты для этого.

Если я передаю значения NULL в метод, и генерируется исключение NullArgumentException, меня интересует, какой аргумент он выбрасывает или только то, что он был брошен?

Подумайте о своем конечном пользователе.Будет ли ему интересно, какой аргумент вызвал исключение?Будешь ли ты заботиться?Если ваш конечный пользователь будет программистом, просматривающим файл журнала для поиска возможной причины сбоя, то я могу себе представить, что он будет благодарен, что вы предоставили эту информацию.Это всегда вопрос «Это имеет какое-то значение для пользователя?» .Если это так (и вы хотите убедиться, что это значение было предоставлено) - проверьте его.

В настоящее время я считаю, что после того, как будет выдано исключение, все ставки отмененыс точки зрения состояния системы, и углубляться в исключения - плохо, так как в этот момент вы начинаете проверять, как реализован ваш метод.

Исключение, как следует из названия, означает исключительная ситуация .Отключены ли все ставки, зависит только от того, что ваше приложение принимает в этих исключительных ситуациях.Если все ставки сняты, я предполагаю, что ваше приложение будет действовать одинаково (обрабатывать его самым простым способом и забывать об этом).Однако, если ваш код хочет сделать что-то (например, журнал, формат для конечного пользователя, повторный выброс и т. Д.) С указанным исключением, то проверка его действительно является правильным исключением с правильным сообщением, брошенным в какую-то скважину.-определенная точка - все те, которые получают ценность и которые стоит проверить.

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