Pergunta

Eu estou procurando exemplo de código que fornece um teste de unidade para serializar e desserializar um objeto a partir de um fluxo de memória. Eu descobri usando C # 2.0 , no entanto os meus atuais usos do projeto VB.NET 1.1 (não me pergunte porquê ...), para que a solução não pode usar os genéricos. Eu também estou usando o framework NUnit para os testes de unidade.

Obrigado!

Foi útil?

Solução

Este é o padrão que eu tenha resolvido mediante:

<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

Outras dicas

NUnit tem suporte embutido para este que o torna um pouco mais fácil:

Dim obj As New MySerializableObject()
Assert.That(obj, Is.BinarySerializable)

Ou para xml:

Dim obj As New MySerializableObject()
Assert.That(obj, Is.XmlSerializable)

Se tudo que você quer fazer é garantir que eles são serializáveis, então tudo o que você deve ter que fazê-lo a fazer uma serialização de um objeto e garantir que nenhum XmlSerializationException foi jogado

[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!");
}

Hmm ... então você está tentando escrever um teste de unidade para serialização? Ou para fluxos? Esta é esperançosamente feito pelo MS já ... mas se você não confia ou implementar algo em seu próprio país ... você poderia apenas preencher objeto com alguns dados, salvá-lo, restaurá-lo, e verificar se os valores dos campos estão em vigor ?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top