我正在寻找提供单元测试以从内存流中序列化和反序列化对象的示例代码。我找到了使用 C# 2.0 的示例,但是我当前的项目使用的是 VB.NET 1.1(不要问我为什么......),所以解决方案不能使用泛型。我也在使用 NUnit 框架进行单元测试。
谢谢!
我正在寻找提供单元测试以从内存流中序列化和反序列化对象的示例代码。我找到了使用 C# 2.0 的示例,但是我当前的项目使用的是 VB.NET 1.1(不要问我为什么......),所以解决方案不能使用泛型。我也在使用 NUnit 框架进行单元测试。
谢谢!
这是我确定的模式:
<Test()> _
Public Sub SerializationTest()
Dim obj As New MySerializableObject()
'Perform additional construction as necessary
Dim obj2 As MySerializableObject
Dim formatter As New BinaryFormatter
Dim memoryStream As New MemoryStream()
'Run through serialization process
formatter.Serialize(memoryStream, obj)
memoryStream.Seek(0, SeekOrigin.Begin)
obj2 = DirectCast(formatter.Deserialize(memoryStream), MySerializableObject)
'Test for equality using Assert methods
Assert.AreEqual(obj.Property1, obj.Property1)
'etc...
End Sub
NUnit 内置了对此的支持,这使它变得相当容易:
Dim obj As New MySerializableObject()
Assert.That(obj, Is.BinarySerializable)
或者对于 xml:
Dim obj As New MySerializableObject()
Assert.That(obj, Is.XmlSerializable)
如果您要做的只是确保它们是可序列化的,那么您应该做的就是对对象进行序列化并确保没有引发 XmlSerializationException
[Test]
public void ClassIsXmlSerializable()
{
bool exceptionWasThrown = false;
try
{
// .. serialize object
}
catch(XmlSerializationException ex)
{
exceptionWasThrown = true;
}
Asset.IsFalse(exceptionWasThrown, "An XmlSerializationException was thrown. The type xx is not xml serializable!");
}
嗯...所以您正在尝试为序列化编写单元测试?还是用于流?希望这已经由 MS 完成了......但是如果您不信任或自己实现某些东西......您可以用一些数据填充对象,保存它,恢复它,并检查字段值是否到位?