2016-09-26 8 views
0

NUnitでテストを書くと、動的オブジェクトにプロパティが存在するかどうかテストするのが難しいようです。NUnitで動的プロパティをテストする正しい方法

Assert.That(() => { var x = aDynamic.expectedProperty; }, Throws.Nothing); 

しかし、逆のテストは私が歌った場所です。私はとRuntimeBinderExceptionを期待していながら

Assert.That(() => { var x = aDynamic.unexpectedProperty; }, Throws.TypeOf<RuntimeBinderException>()); 

これは、私はそれが決して特定の例外を除いて成功していないこれを緩和しようとする方法にもかかわらず、NUnit.Framework.AssertionExceptionをスローします。特に捕らえられたときでさえ。

Assert.That(
    () => 
    { 
     try 
     { 
      var x = aDynamic.unexpectedProperty; 
     } 
     catch (RuntimeBinderException ex) 
     { 
      throw ex; 
     } 
     catch (Exception ex) 
     { 
      //do nothing 
     } 
    }, 
    Throws.TypeOf<RuntimeBinderException>()); 
+1

私はすべてのサンプルを試してみました。それらはうまくいきました。両方のテストがNUnitランナーに渡されました。 – dasblinkenlight

答えて

1

NUnitの3は、例外がスローされた場合、テストよりも使用する方がはるかに簡単ですHas.Property構文があります。たとえば、ここではプロパティの存在と不存在をテストする単純なテストを示します。

[Test] 
public void DynamicPropertyTest() 
{ 
    dynamic dyn = new 
    { 
     Name = "Rob", 
     Country = "Canada" 
    }; 

    Assert.That(dyn, Has.Property("Name")); 
    Assert.That(dyn, Has.No.Property("Age")); 
} 
+0

これはまさに私がこれが存在することを望んでいた構文の種類です。今は問題が発生していますが、オブジェクトにプロパティがあるときをテストするときに例外が発生しましたが、DynamicViewDataDictionary例外では何も失敗しています。 – QueueHammer

+0

どのバージョンのNUnitを使用していますか、どのバージョンの.NETを使用していますか?テストを実行するために何を使用していますか?サンプルコードはあなたのために機能しますか?それは最新のNUnitとNUnit VSアダプタで私にとっては役に立ちます。 –

関連する問題