2012-03-28 4 views
1

ich einige Code haben, die eine Ausnahme behauptet wird ausgelöst, wenn eine Methode aufgerufen wird, und dann verschiedene Eigenschaften auf die Ausnahme behauptet:Wie die ausgelöste Ausnahme mit Assert.That, à la Assert.Throws bekommen <T>

var ex = Assert.Throws<MyCustomException>(() => MyMethod()); 
Assert.That(ex.Property1, Is.EqualTo("Some thing"); 
Assert.That(ex.Property2, Is.EqualTo("Some thing else"); 

ich mag den Assert.Throws<T> Aufruf konvertieren die Assert.That Syntax zu verwenden, wie meine persönliche Präferenz ist:

Assert.That(() => MyMethod(), Throw.Exception.TypeOf<MyCustomException>()); 

Allerdings kann ich nicht herausfinden, wie die Ausnahme von dieser zurück, so kann ich führe den folgenden Profi durch Behauptungen. Irgendwelche Ideen?

Antwort

1

Leider glaube ich nicht, dass Sie Assert.That verwenden können, um die Ausnahme wie Assert.Throws zurückzugeben. Sie könnten jedoch Programm noch in einem flüssigeren Stil als erstes Beispiel eine der folgenden verwendet:

Option 1 (die meisten fließend/lesbar)

Assert.That(() => MyMethod(), Throws.Exception.TypeOf<MyCustomException>() 
    .With.Property("Property1").EqualTo("Some thing") 
    .With.Property("Property2").EqualTo("Some thing else")); 

Option 2

Assert.Throws(Is.Typeof<MyCustomException>() 
    .And.Property("Property1").EqualTo("Some thing") 
    .And.Property("Property2").EqualTo("Some thing else"), 
    () => MyMethod()); 

Vor-/Nachteile:

  • Der Nachteil ist die Codierung von Eigenschaftsnamen.
  • Der Vorteil ist, dass Sie einen einzigen kontinuierlichen fließenden Ausdruck haben, anstatt ihn in 3 separate Ausdrücke aufzuteilen. Der Sinn der Verwendung von Assert.That-ähnliche Syntax ist für die fließende Lesbarkeit.
+0

Prost. Ich finde, dass wenn ich die Beschränkungen zusammen fasse, ich die Details über die Einschränkung verliere, die die Behauptung zum Scheitern bringt. Ich finde auch die separaten Einschränkungen klarer, was jede Aussage prüft. Sieht so aus, als ob ich bei meinem Original bleiben würde :( – MPritchard

+0

@MPritch, das sind sehr gültige Punkte und ich habe nicht bemerkt, dass du Details darüber verloren hast, welche Constraint das Scheitern verursachen würde. Danke, dass du darauf hingewiesen hast. – Matt