在.NET中的Fluent Assertions中检查ShouldThrow Exception.Data

And*_*dez 4 .net c# unit-testing fluent-assertions

好的,我正在运行单元测试,以查看Exception.Data属性是否包含针对特定命名键的特定值.

Exception.Data的类型为IDictionary.IDictionary只有2个重载,我无法看到验证字典中的内容的方法.

我有以下代码抛出异常:

public class MyClass
{
    public void ThrowMyException()
    {
        throw new MyException();
    }
}

public class MyException : Exception
{
    public MyException()
    {
        this.Data.Add("MyKey1", 212);
        this.Data.Add("MyKey2", 2121);
    }
}
Run Code Online (Sandbox Code Playgroud)

然后进行测试以验证MyKey1 = 212和MyKey2 = 2121:

[TestClass]
public class UnitTest1
{
    [TestMethod]
    public void TestMethod1()
    {
        MyClass classUnderTest = new MyClass();

        Action test = () =>
        {
            classUnderTest.ThrowMyException();
        };


        test.ShouldThrow<MyException>() //.And.Data.Keys.Should().Contain("")

    }
}
Run Code Online (Sandbox Code Playgroud)

我想测试数据包含值为212的MyKey1和值为2121的MyKey2.

Dom*_*see 7

如果要测试非泛型中是否存在键值对,则需要创建一个对象并检查它是否存在于字典中. IDictionaryDictionaryEntry

所以在你的情况下它会是这样的:

test.ShouldThrow<MyException>().And
    .Data.Should().Contain(new DictionaryEntry("MyKey2", 2121));
Run Code Online (Sandbox Code Playgroud)