2010-03-02 50 views
0

我有大量由企業系統調用的C#WCF服務。當我們在開發過程中遇到問題時,可能需要很長時間才能在我們的開發機器上重現確切的條件。實質上,我們需要使用WCF &記錄請求,並根據記錄的數據構建集成測試。如果請求中的對象很大,則可能需要相當長的時間。使用反射來重新創建測試對象

我希望能夠打開記錄/調試模式,以便請求中的所有對象都被序列化爲C#代碼。請參閱WriteCSharpToCreateObject方法。然後,我可以將日誌中的代碼直接複製到新的c#測試中。這是我的第一個努力 - 對於非常簡單的對象來說哪種工作方式。 (xml serilization確實有效)是否有可用的實用程序/庫可用?有沒有更好的辦法?

private static void LogRequestParms(params object[] list) 
{ 
    foreach (var o in list) 
    { 
     SerializeObjectAndWriteToFile(o); 
     string cSharpCode = WriteCSharpToCreateObject(o); 
    } 
} 

private static string WriteCSharpToCreateObject(object o) 
{ 
    StringBuilder b = new StringBuilder(); 

    Type myType = o.GetType(); 
    b.AppendLine(myType.Name + " o = new " + myType.Name + "();"); 

    PropertyInfo[] myFields = myType.GetProperties(); 
    foreach (var v in myFields) 
    { 
     b.AppendLine("o." + v.Name + " = " + v.GetValue(o, null).ToString() + ";"); 
    } 
    return b.ToString(); 
} 

private static void SerializeObjectAndWriteToFile(object request) 
{ 
    using (System.IO.Stream s = new System.IO.FileStream("C:\\temp\\logRequest.log", System.IO.FileMode.Append)) 
    { 
     System.Xml.Serialization.XmlSerializer objectSerilizer = new System.Xml.Serialization.XmlSerializer(request.GetType()); 
     objectSerilizer.Serialize(s, request); 
    } 
} 
+0

這不就是迷你垃圾箱的設計目的嗎? – Ian 2010-03-02 15:52:20

回答

1

你也可以序列化進入的對象,並將它們保存在文件中(就像你已經在做的那樣)。然後在你的測試代碼中,反序列化文件中的對象。

+0

這也應該工作..不知道爲什麼我沒有想到它..泰克斯 – Mel 2010-03-02 16:03:18

1

你可以使用二進制序列化使用的BinaryFormatter類,然後在你的測試反序列化序列化對象。

+0

是的 - 這聽起來比我試圖更容易 - 謝謝 – Mel 2010-03-02 16:01:51

相關問題