2008-11-18 51 views

回答

2

這是模式我在支付:

<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 
0

嗯...所以你試圖編寫一個單元測試的序列化?還是爲了流?這可能已經由MS完成了......但是如果你不信任或自己實現某個東西......你可以用一些數據填充對象,保存它,恢復它,並檢查字段值是否到位?

+0

這裏基本上是我想要做的,但在VB.NET 1.1: http://stackoverflow.com/questions/236599/how-to-unit- test-if-my-object-is-really-serializablable – Technobabble 2008-11-18 17:15:43

1

如果你想要做的是,以確保它們是可序列化然後你應該做它做一個對象的序列化,並確保沒有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!"); 
} 
+0

對不起,沒有看到你使用VB.NET ..讓我知道你是否想讓我把它翻譯成VB.NET爲你 – TheCodeJunkie 2008-11-18 17:28:23

+0

沒有必要,我可以閱讀C#舒適。然而,我遇到了一些VB.NET和C#在某些特性方面不盡相同的實例(比如在使用[field:NonSerialized]屬性聲明時,VB.NET似乎不支持)。 – Technobabble 2008-11-18 17:36:56

+0

如果這是你的問題的解決方案,那麼請把它作爲答案 – TheCodeJunkie 2008-11-18 18:57:59

2

的NUnit已經內置支持此這使得它很容易一點:

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

或爲XML:

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