使用反射创建测试对象

时间:2010-03-02 15:38:41

标签: c# testing reflection

我有大量的企业系统调用的C#WCF服务。当我们在开发过程中遇到问题时,可能需要很长时间才能在我们的开发机器上重现确切的条件。基本上我们需要使用WCF& amp;根据记录的数据构建集成测试。如果请求中的对象很大,则可能需要相当长的时间。

我希望能够打开日志/调试模式,以便将请求中的所有对象序列化为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);
    }
}

2 个答案:

答案 0 :(得分:1)

您可以使用 BinaryFormatter 类使用二进制序列化,然后在测试中反序列化序列化对象。

答案 1 :(得分:1)

您也可以序列化进入的对象,并将其保存在文件中(就像您已经在做的那样)。然后在测试代码中,从文件中反序列化对象。