C# 从模拟对象列表创建xml时出错
我想生成一个示例xml,所以我编写了一个单元测试,其中我使用moq创建了一个对象。我试着像这样序列化它:C# 从模拟对象列表创建xml时出错,c#,asp.net,xml,unit-testing,serialization,C#,Asp.net,Xml,Unit Testing,Serialization,我想生成一个示例xml,所以我编写了一个单元测试,其中我使用moq创建了一个对象。我试着像这样序列化它: private AssetDescription GetAssetDescription(string description, string type, string name, string iconUrl) { var asstDesp = new Mock<AssetDescription>(type); asstDesp.Setup(m
private AssetDescription GetAssetDescription(string description, string type, string name, string iconUrl)
{
var asstDesp = new Mock<AssetDescription>(type);
asstDesp.Setup(m => m.Description).Returns(description);
asstDesp.Setup(m => m.Type).Returns(type);
asstDesp.Setup(m => m.Name).Returns(name);
asstDesp.Setup(m => m.IconUrl).Returns(iconUrl);
return asstDesp.Object;
}
[DataContract]
public class AssetDescription
{
[DataMember]
public virtual string Type { get; set; }
[DataMember]
public virtual string Name { get; set; }
[DataMember]
public virtual string Description { get; set; }
[DataMember]
public virtual string IconUrl { get; set; }
public AssetDescription(string type)
{
Type = type;
}
public AssetDescription()
{
// I have added a parameter less constructor to xml serialization.
}
}
var fgh = GetListAssetDescriptions();
var fghd = SerializeObject(fgh);
XML序列化方法:
public string SerializeObject(object obj)
{
var xmlDoc = new XmlDocument();
var serializer = new XmlSerializer(obj.GetType());
using (var ms = new MemoryStream())
{
serializer.Serialize(ms, obj);
ms.Position = 0;
xmlDoc.Load(ms);
return xmlDoc.InnerXml;
}
}
现在我可以像这样成功地序列化AssetDescription
:
var ds = GetAssetDescription("Description1", "type1", "name1", "iconurl1");
var dsxml = SerializeObject(ds);
问题:资产描述
是列表的一部分,该列表是我使用moq创建的其他对象的一部分。经过一些测试后,我将其分解为:-
我无法序列化AssetDescription
的列表,它引发了错误
以下是我的列表创建方法:
private List<AssetDescription> GetListAssetDescriptions()
{
var lst = new List<AssetDescription>
{
GetAssetDescription("Description1", "type1", "name1", "iconurl1"),
GetAssetDescription("Description2", "type2", "name2", "iconurl2"),
GetAssetDescription("Description3", "type3", "name3", "iconurl3"),
GetAssetDescription("Description4", "type4", "name4", "iconurl4")
};
return lst;
}
但出现这种错误:
生成XML文档时出错
问题:
没有答案,但我对这个问题感到困惑。让我问你几个问题:
模拟仅用于测试。在将
Moq
引用添加到非测试项目之前,必须认真考虑。模拟具有相当复杂的内部结构——它们被设计成假装它们不是的东西。XML序列化并不是这些人设计的一部分,所以不能将mock序列化为XML也就不足为奇了。我要说的是,没有解决这个问题的办法。因为mock不能序列化。我得到了这些Poco类,其中一些属性没有公共setter,我想使用这些类生成一个示例xml(AssetDescription是类的一部分)。所以我决定对它们进行模拟,并制作一个示例xml。所以我遇到了这个问题。之后,我公开了他们的属性设置器,并生成了一个xml。xml的用途:-我将从我的服务器获取一个xml,但现在无法发出请求。非常感谢您的努力。好的,您很怀念使用mock。模拟不能序列化,只能用于单元测试。您必须想出另一种创建xml的方法(继承AssetDescription
和“禁用”有问题的函数??)