用NUnit测试动态属性的正确方法
本文关键字:方法 属性 NUnit 测试 动态 | 更新日期: 2023-09-27 18:08:57
在NUnit中编写测试,似乎会直接测试动态对象上是否存在属性。
Assert.That(() => { var x = aDynamic.expectedProperty; }, Throws.Nothing);
然而,在测试相反的情况下,我遇到了一个难题。
Assert.That(() => { var x = aDynamic.unexpectedProperty; }, Throws.TypeOf<RuntimeBinderException>());
这抛出了一个NUnit.Framework.AssertionException
,而我期待一个RuntimeBinderException
,尽管我如何试图减轻这种情况,它永远不会成功与特定的异常。
Assert.That(
() =>
{
try
{
var x = aDynamic.unexpectedProperty;
}
catch (RuntimeBinderException ex)
{
throw ex;
}
catch (Exception ex)
{
//do nothing
}
},
Throws.TypeOf<RuntimeBinderException>());
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"));
}