2010-02-11 14 views
14

Zastanawiam się, czy ktoś wie o narzędziach lub technikach do automatycznego wstrzykiwania typowych błędów do działającego programu .NET. Takie tam ...Wstrzykiwanie usterek dla aplikacji .NET?

  • Losowo wstrzykiwania OutOfMemoryException po alokacji
  • Losowo wstrzyknąć FileNotFoundException na próby dostępu do plików
  • Losowo wstrzyknięć IO lub wyjątki od sieci za pomocą gniazdka.

Więc jestem naprawdę szuka sposobu, aby przechwycić kilka konkretnych połączeń w CLR podobne do tego, co robi Weryfikator aplikacji do natywnego kodu Win32. Celem jest przetestowanie aplikacji w przypadku wystąpienia wielu błędów poza kontrolą programistów i upewnienie się, że takie warunki są obsługiwane.

+0

Odłączyć kabel sieciowy? – ChaosPandion

+3

'Sarkazm' Odłączyć swoją pamięć? –

+1

Dokładnie :) Istnieje wiele hacków do zrobienia tego dla różnych zasobów, ale nie skalują się. – noctonura

Odpowiedz

8

Istnieje projekt codeplex o nazwie TestAPI, który może wykonać wstrzyknięcie błędu runtime. Musisz spojrzeć na jego managed code fault injection API. Korzysta z CLR profiling API do przechwytywania wywołań metod w środowisku wykonawczym i modyfikowania ich zachowania.

Spójrz na an example, aby zobaczyć, jak wprowadzić wyjątek do wywołania metody w już skompilowanym exe.

+0

Przeczytałem kilka przykładów i myślę, że wygląda naprawdę obiecująco, a fakt, że jest bezpłatny, na pewno pomaga. – ChaosPandion

+0

Tak - to wygląda naprawdę dobrze. – noctonura

0

Nie wiem, jak można "przypadkowo" wstrzyknąć te rzeczy, ale poleciłabym wykuć część, która zwykle nie jest pod Twoją kontrolą, i wyśmiewać się, wyrzuć wyjątek w niektórych testach.

+0

Mam wrażenie, że mówi on o dużej ilości kodu, który chce zweryfikować, więc wątpię, czy będzie on w stanie przeprojektować cały ten kod, aby wspierać kpiny. – ChaosPandion

+0

Powiedziałbym, że to jego problem, ale rozumiem trudności w radzeniu sobie z dużą starszą bazą kodu.Nie widzę sposobu, aby właściwie przetestować te scenariusze bez refaktoryzacji dla kpiny, ale może ktoś inny coś zmieni. –

5

Typemock Isolator wydaje się być najlepszym wyborem.

Oto, co możesz zrobić, jeśli chcesz rzucić FileNotFoundException, aby symulować testowanie.

W kodzie produkcyjnym, trzeba taki sposób

public static Project OpenProject(string filePath) 

I w kodzie testowym, można sfałszować OpenProject wywołanie jak to

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

i kiedy Twój kod hit OpenProject, a FileNotFoundException zostanie rzucony.

1

To nie jest dokładnie kwestia tego, o co pytasz, ale jest to powiązane i może być pomocne w tym samym celu poprawy obsługi wyjątków w Twojej aplikacji.

Redgate Wyjątek Hunter http://www.red-gate.com/products/Exception_Hunter/index.htm

Nie używałem tego konkretnego produktu, ale inne produkty RedGate mam używane były świetne.

Powiązane problemy