2012-03-28 4 views
1

私は例外を主張するいくつかのコードは、メソッドが呼び出されたときに投げ、その後、例外のさまざまなプロパティアサートされています:ラAssert.Throws A、Assert.Thatを使用してスローされた例外を取得する方法<T>

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

それは私の個人的な好みであるように私は、Assert.That構文を使用するAssert.Throws<T>コールを変換したい:

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

しかし、私はこのことから例外を返す方法を見つけ出すことはできませんので、私はすることができます後続のプロを実行するpertyアサーション。何か案は?

答えて

1

残念ながら、Assert.Throwsのような例外を返すためにAssert.Thatを使用することはできません。あなた次のいずれかを使用して、あなたの最初の例よりも流暢なスタイルでできた、しかし、まだプログラム:1(リード/最も流暢)

オプション

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

オプション2

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

の長所/短所:

  • ハードコードのプロパティ名は欠点です。
  • 3つの別々の式に分割するのではなく、1つの連続した流暢な式があります。 Assert.Thatのような構文を使用するポイントは、読みやすいです。
+0

乾杯。私は、制約を一緒にすると、どの制約がアサーションを失敗させるのかについての詳細を失います。私はまた、それぞれの声明が何を確認しているかについて、別個の制約が明確になっていることも分かります。結局のところオリジナルのままにしておくように見えます:( – MPritchard

+0

@MPritch、これらは非常に有効な点ですが、どの制約が失敗の原因になるかについての詳細が失われていることはわかりませんでした。 – Matt

関連する問題