Инъекция ошибок для приложений .NET? - PullRequest
15 голосов
/ 11 февраля 2010

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

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

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

Ответы [ 4 ]

8 голосов
/ 11 февраля 2010

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

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

5 голосов
/ 11 февраля 2010

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

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

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

public static Project OpenProject(string filePath)

И в своем тестовом коде вы можете подделать OpenProject вызов, подобный этому

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

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

1 голос
/ 11 февраля 2010

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

Redgate Exception Hunter http://www.red -gate.com / продукция / Exception_Hunter / index.htm

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

0 голосов
/ 11 февраля 2010

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

...