C# 使用NUnit测试动态属性的正确方法

C# 使用NUnit测试动态属性的正确方法,c#,unit-testing,dynamic,nunit,C#,Unit Testing,Dynamic,Nunit,在NUnit中编写测试时,似乎测试动态对象上是否存在属性是一件非常困难的事情 Assert.That(() => { var x = aDynamic.expectedProperty; }, Throws.Nothing); 然而,测试相反的是我击中了一个桑 Assert.That(() => { var x = aDynamic.unexpectedProperty; }, Throws.TypeOf<RuntimeBinderException>()); NUn

在NUnit中编写测试时,似乎测试动态对象上是否存在属性是一件非常困难的事情

Assert.That(() => { var x = aDynamic.expectedProperty; }, Throws.Nothing);
然而,测试相反的是我击中了一个桑

Assert.That(() => { var x = aDynamic.unexpectedProperty; }, Throws.TypeOf<RuntimeBinderException>());
NUnit3有一个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"));
}

我刚刚尝试了你所有的例子,它们对我来说都很好:两个测试都通过了NUnit runner的测试。这正是我所希望的语法。现在我遇到了一个问题:当对象具有属性时,我在测试时遇到异常,但由于DynamicViewDataDictionary异常,它以任何方式失败。您使用的NUnit版本是什么?.NET版本?您使用的是什么来运行测试?示例代码对您有用吗?我用最新的NUnit和NUnit VS适配器就可以了。
[Test]
public void DynamicPropertyTest()
{
    dynamic dyn = new
    {
        Name = "Rob",
        Country = "Canada"
    };

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