문제

메모리 스트림에서 객체를 직렬화하고 실질화하기 위해 단위 테스트를 제공하는 코드를 찾고 있습니다. 나는 찾았다 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