我正在使用C#2.0和Nunit Test.我有一些需要序列化的对象.这些对象非常复杂(在不同级别继承并包含许多对象,事件和委托).
如何创建单元测试以确保我的对象可以安全地序列化?
这是一种通用方式:
public static Stream Serialize(object source) { IFormatter formatter = new BinaryFormatter(); Stream stream = new MemoryStream(); formatter.Serialize(stream, source); return stream; } public static T Deserialize(Stream stream) { IFormatter formatter = new BinaryFormatter(); stream.Position = 0; return (T)formatter.Deserialize(stream); } public static T Clone (object source) { return Deserialize (Serialize(source)); }
我在这里的一些单元测试中有这个:
MyComplexObject dto = new MyComplexObject(); MemoryStream mem = new MemoryStream(); BinaryFormatter b = new BinaryFormatter(); try { b.Serialize(mem, dto); } catch (Exception ex) { Assert.Fail(ex.Message); }
可能会帮助你...也许其他方法可以更好但是这个方法效果很好.
除了上面的测试 - 确保序列化程序将接受您的对象,您需要进行往返测试.将结果反序列化回新对象,并确保两个实例是等效的.