簡體   English   中英

使用反射來重新創建測試對象

[英]Use reflection to Recreate Object for Test

我有大量的企業系統正在調用的C#WCF服務。 當我們在開發過程中遇到問題時,可能需要很長時間才能在我們的開發機器上重現確切的條件。 本質上,我們需要使用WCF記錄請求,並基於記錄的數據構建集成測試。 如果請求中的對象很大,則可能會花費很多時間。

我希望能夠啟用日志記錄/調試模式,以便將請求中的所有對象序列化為c#代碼。 請參見方法WriteCSharpToCreateObject。 然后,我將能夠將日志中的代碼直接復制到新的C#測試中。 這是我的第一項努力-適用於非常簡單的對象的哪種工作。 (xml序列化確實有效)是否有任何實用程序/庫可以做到這一點? 有沒有更好的辦法?

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);
    }
}

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

您還可以序列化傳入的對象,並將其保存在文件中(就像您已經在做的那樣)。 然后,在測試代碼中,反序列化文件中的對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM