我正在寻找提供单元测试的示例代码,以便从内存流中序列化和反序列化对象。我找到了使用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完成......但是如果你不信任或自己实现某些东西......你可以用一些数据填充对象,保存它,恢复它,并检查字段值是否到位?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top