Я понимаю, как работают исключения и как их перехватывать и обрабатывать в C #, но как я могу имитировать события, которые могут вызвать исключение, чтобы убедиться, что оно перехвачено правильно? Например, возможно ли запустить приложение в некой тестовой среде, где можно моделировать проблемы с сетью, проблемы с базой данных и т. Д.? Исключения по своей природе кажутся трудно воспроизводимыми, что затрудняет обеспечение того, чтобы ваш код справился с ними.
Хотя я в основном разрабатываю с использованием C # /. NET / Visual Studio, ответы или ресурсы, относящиеся к другим языкам, могут быть полезны.
c#
testing
exceptions
Пирс Майерс
источник
источник
Ответы:
1) Если вы следовали модели внедрения зависимостей, вы могли бы заменить реальные реализации определенных частей на макеты, которые будут генерировать исключения по мере необходимости. Это, однако, потребовало бы от вас изначально разработать свое приложение особым образом или полностью переработать его.
Подобно:
Здесь, однако, у нас возникнет проблема, заключающаяся в том, что потребительский код не должен заниматься обработкой конкретных исключений реализации.
2) Другой подход - заменить определенные вызовы методов вашими пользовательскими обертками.
Вместо того:
ты используешь:
предоставив собственный метод расширения (просто быстрая идея):
источник
Вам нужно посмотреть на насмешливые рамки.
С их помощью вы используете внедрение зависимостей для вызова, скажем, поддельной базы данных, а не реальной. Это означает, что вы имеете полный контроль над тем, что возвращается для каждого вызова.
Затем вы настраиваете тест, который при вызове просто вызывает желаемое исключение:
Ваш тест проходит, когда ваш код обрабатывает это правильно.
источник
Насмешка и инъекция могут помочь вам продвинуться далеко вперед и в некоторых случаях потребуют больших изменений в подходе.
Если вы не хотите перепроектировать свое приложение, чтобы оно подходило для среды тестирования, тогда вам действительно нужен хост или среда, сфальсифицированная на наличие ошибок. Существует много способов симуляции медленной работы сети в случае сбоя (даже в инструментах тестирования Microsoft есть немного этого в области веб-тестирования). Я добился наибольшего успеха в размещении машин за маршрутизатором, который может быть подделан для изменения симуляции в координации с набором базы данных для создания ошибок и сценариев для изменения ошибок, которые выдает база данных.
Даже при этом, если вы идете достаточно быстро или слишком далеко к аппаратному обеспечению, возникают ошибки, такие как проблемы параллелизма и сбои отложенной записи, которые вы практически не можете смоделировать. Иногда вам приходится вызывать их по-настоящему, а иногда нужно просто работать без защитной сетки.
источник