如果我的对象真的可序列化,如何进行单元测试?

Pok*_*kus 33 .net c# serialization unit-testing .net-2.0

我正在使用C#2.0和Nunit Test.我有一些需要序列化的对象.这些对象非常复杂(在不同级别继承并包含许多对象,事件和委托).

如何创建单元测试以确保我的对象可以安全地序列化?

小智 47

这是一种通用方式:

public static Stream Serialize(object source)
{
    IFormatter formatter = new BinaryFormatter();
    Stream stream = new MemoryStream();
    formatter.Serialize(stream, source);
    return stream;
}

public static T Deserialize<T>(Stream stream)
{
    IFormatter formatter = new BinaryFormatter();
    stream.Position = 0;
    return (T)formatter.Deserialize(stream);
}

public static T Clone<T>(object source)
{
    return Deserialize<T>(Serialize(source));
}
Run Code Online (Sandbox Code Playgroud)


Pat*_*ins 15

我在这里的一些单元测试中有这个:

MyComplexObject dto = new MyComplexObject();
MemoryStream mem = new MemoryStream();
BinaryFormatter b = new BinaryFormatter();
try
{
    b.Serialize(mem, dto);
}
catch (Exception ex)
{
    Assert.Fail(ex.Message);
}
Run Code Online (Sandbox Code Playgroud)

可能会帮助你...也许其他方法可以更好但是这个方法效果很好.


Sco*_*ein 14

除了上面的测试 - 确保序列化程序将接受您的对象,您需要进行往返测试.将结果反序列化回新对象,并确保两个实例是等效的.