二进制序列化.NET异常派生类;使用FluentAssertions进行单元测试

时间:2016-10-05 18:52:02

标签: c# unit-testing fluent-assertions

我有一个自定义异常,它接受ctor中的几个字符串,后跟通常的Exception innerException最后一个参数。异常类使用[Serializable]进行修饰。此异常类MyException也继承自MyBaseExceptionException继承自var error = new MyException("entityname1"); error.Should().BeBinarySerializable();

我正在尝试对所有ctor参数进行单元测试,以确保水合和脱水。这有效:

var error = new MyException("entityname1",
    new InvalidOperationException("some error"));
error.Should().BeBinarySerializable();

这不起作用:

Expected MyException with message "Unable to sign-in “entityname1”."
 to be serializable, but serialization failed with:

Expected member InnerException
to be System.InvalidOperationException with message \"some error\"\n,
but found System.InvalidOperationException with message \"some error\"

它给出了:

var error = new MyException("entityname1", new MyOtherException("some error"));

抛出的错误没有可能让我们知道问题的innerException信息。

有趣的是,这有效:

BinaryFormatter

知道为什么一个序列化失败和/或如何调试问题?

.NET 4.6.1和FluentAssertions 4.14.0

修改

鉴于@Evk发现的内容,我尝试使用var formatter = new BinaryFormatter(); var source = new Exception("some error"); byte[] buffer; using (var stream = new MemoryStream()) { formatter.Serialize(stream, source); buffer = new byte[stream.Length]; stream.Position = 0; stream.Read(buffer, 0, buffer.Length); } using (var stream = new MemoryStream(buffer)) { var ex = (Exception)formatter.Deserialize(stream); ex.ToString().Should().Be(source.ToString()); } 手动序列化/反序列化异常,它似乎工作正常:

<head>

所以这可能是FluentAssertions中的一个错误。

1 个答案:

答案 0 :(得分:0)