在 .NET 的 Fluent Assertions 中检查 ShouldThrow Exception.Data
Checking ShouldThrow Exception.Data in Fluent Assertions in .NET
好的,我正在 运行 进行单元测试,以查看 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);
}
}
然后进行测试以尝试验证 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("")
}
}
我想测试数据是否包含值为 212 的 MyKey1 和值为 2121 的 MyKey2。
基本上,您应该获得对您的异常的引用,并根据需要执行任何操作。您可以转换它并验证对象。像这样:
[TestClass]
public class UnitTest1
{
[TestMethod]
public void TestMethod1()
{
MyClass classUnderTest = new MyClass();
Exception ex;
try
{
Action test = () =>
{
classUnderTest.ThrowMyException();
};
}
catch (Exception exception)
{
ex = exception;
}
test.Should.Throw<MyException>();
ex.ShouldBeOfType<MyException();
((MyException)ex).Data.ShouldContain("MyKey");
}
}
如果你想测试key-value对是否存在于non-genericIDictionary
,你需要创建一个DictionaryEntry
对象,并检查它是否存在于字典中。
所以在你的情况下它会是这样的:
test.Should.Throw<MyException>().And
.Data.Should().Contain(new DictionaryEntry("MyKey2", 2121));
好的,我正在 运行 进行单元测试,以查看 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);
}
}
然后进行测试以尝试验证 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("")
}
}
我想测试数据是否包含值为 212 的 MyKey1 和值为 2121 的 MyKey2。
基本上,您应该获得对您的异常的引用,并根据需要执行任何操作。您可以转换它并验证对象。像这样:
[TestClass]
public class UnitTest1
{
[TestMethod]
public void TestMethod1()
{
MyClass classUnderTest = new MyClass();
Exception ex;
try
{
Action test = () =>
{
classUnderTest.ThrowMyException();
};
}
catch (Exception exception)
{
ex = exception;
}
test.Should.Throw<MyException>();
ex.ShouldBeOfType<MyException();
((MyException)ex).Data.ShouldContain("MyKey");
}
}
如果你想测试key-value对是否存在于non-genericIDictionary
,你需要创建一个DictionaryEntry
对象,并检查它是否存在于字典中。
所以在你的情况下它会是这样的:
test.Should.Throw<MyException>().And
.Data.Should().Contain(new DictionaryEntry("MyKey2", 2121));