ExpectedException Attribute und MSTest mit AAA Syntax

 
Ich nutze schon eine ganze weile MSTest aus verschiedenen Gründen. Doch immer wieder stoße ich beim testen von Exceptions auf Schwierigkeiten. Zum einem ist die Syntax mit Attributen gewöhnungsbedürftig wenn man gewohnt ist seine Tests nach AAA (Arrange, Act, Assert) zu schreiben. Zum anderen, und das ist meiner Meinung nach das größere Problem, kann ich nicht genau überprüfen wann und wo der Fehler auftreten darf. Außerdem ist eine Untersuchung der Exception nur schwer möglich. Mit ein paar Zeilen Code kann man diese Probleme aber elegant lösen.
 
Hier ein Beispiel aus einer CodeKata:
image
Der erste Test mit Attribute. Der “Assert” Abschnitt bleibt leer. Eine Untersuchung der Exception ist nicht möglich.
 
Eine kleine generische Methode Throws<T> die als Parameter eine Delegaten erwartet setzt uns in die Lage gezielt zu steuern wann wir eine Exception erwarten und können diese anschließend bei Bedarf auswerten.
 
image
 
Hier der geänderte Test:
 
image

Mit dieser kleinen Hilfsmethode kann gezielt geprüfen werden wann eine Exception erwartet wird. Der Rückgabewert kann für weitere Untersuchungen genutzt werden.