Внедрение ошибок для приложений .NET?

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

  • Случайно вводить OutOfMemoryException при выделении
  • Случайно вставляйте FileNotFoundException при попытке доступа к файлам
  • Случайно вводить IO или сетевые исключения при использовании сокета.

Итак, я действительно ищу способ перехватить некоторые определенные вызовы в CLR, аналогичные тому, что AppVerifier делает для собственного кода Win32. Цель состоит в том, чтобы протестировать приложения в условиях множества ошибок вне контроля разработчиков и убедиться, что такие условия обрабатываются.

Ответ 1

Существует проект codeplex, называемый TestAPI, который может выполнять инъекцию с ошибкой во время выполнения. Вам нужно взглянуть на управляемый код для исправления ошибок API. Он использует API профилирования CLR для перехвата вызовов методов во время выполнения и изменения их поведения.

Посмотрите пример, чтобы увидеть, как вводить исключение в вызов метода в уже скомпилированном exe.

Ответ 2

Typemock Isolator, кажется, ваш лучший выбор.

Вот что вы можете сделать, если вы хотите бросить FileNotFoundException для моделирования тестирования.

В вашем производственном коде у вас есть такой метод

public static Project OpenProject(string filePath)

И в вашем тестовом коде вы можете подделать вызов OpenProject следующим образом

Isolate.WhenCalled(()=>Project.OpenProject(nulll)).WillThrow(new FileNotFoundException());

И когда ваш код попадет в OpenProject, будет выброшен FileNotFoundException.

Ответ 3

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

redgate Exception Hunter http://www.red-gate.com/products/Exception_Hunter/index.htm

Я не использовал этот конкретный продукт, но другие продукты redgate, которые я использовал, были большими.

Ответ 4

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