Wie simuliert das werfen einer Ausnahme in Unit-tests?
Wie kann ich simulieren, wird eine Ausnahme geworfen wird, in C#, unit-tests?
Ich möchte in der Lage sein, eine 100% - ige Abdeckung von meinem code, aber ich kann nicht den code zu testen, mit Ausnahmen, die auftreten können. Zum Beispiel kann ich nicht simulieren, eine macht faluire, die auftreten können.
Beispiel:
public void MyMethod()
{
try
{
...
}
catch(OutOfMemoryException e)
{
...
}
catch(RandomErrorFromDatabaseLayer e)
{
...
}
}
Möchte ich simulieren zu können, ist jede Art von Ausnahme, die in dieser Methode und erwischt werden sollte.
Gibt es irgendwelche Bibliotheken, die helfen können Sie mir in dieser Angelegenheit?
Edit 1:
Jede Hilfe in Erfüllung, was ich fragte, mit Moq?
- Deinem code-Beispiel nicht wirklich erklären Ihr problem. Warum kann man nicht simulieren Sie einen Stromausfall? Versuchen Sie zu 'injizieren' Bedingungen dazu führen würde, dass die genannten Ausnahmen geworfen werden? Was ist das wirkliche Problem?
- ja, genau wie in der stackoverflow.com/a/8851628/79379 , aber ohne mich zu zerstören, eine Datenbank, um zu simulieren eine Datenbank faluire.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie erstellen Sie ein mock-Objekt steht für das Reale Objekte, können diese Ausnahmen auslösen. Dann erstellen Sie tests, die sind einfach so etwas wie dieses:
Wenn Sie mit einem dependency injection-framework, es macht ersetzen der code der mit dem mock-code viel einfacher.
Was Sie brauchen, ist stub - einem Objekt, das simulieren von bestimmten Bedingungen für Ihren code. Für Testzwecke können Sie ersetzen in der Regel real-Objekt-Implementierung mit stub (oder eine andere Art gefälscht Objekt). In Ihrem Fall sollten Sie:
Nun, die Klasse, die Sie testen sollten konfigurierbar sein bis zu einem gewissen Grad -, so dass Sie leicht ersetzen realen
DataProvider
Umsetzung mit Stubs/gefälscht, wenn die Prüfung (wie Sie sagte, wollen Sie nicht zu zerstören dein DB - niemand will!). Dies kann erreicht werden zum Beispiel durch constructor injection (oder in der Tat, alle anderen dependency injection - Technik).Ihren test dann trivial ist (Teil-up-Anforderung zu testen, wenn die exception geworfen wird):