我有大量的企业系统调用的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);
}
}
答案 0 :(得分:1)
您可以使用 BinaryFormatter 类使用二进制序列化,然后在测试中反序列化序列化对象。
答案 1 :(得分:1)
您也可以序列化进入的对象,并将其保存在文件中(就像您已经在做的那样)。然后在测试代码中,从文件中反序列化对象。