我有一个依赖于XmlSerializer的类。我想模拟XmlSerializer来验证它的方法是否被正确调用。但是,因为Serialize()和Deserialize()方法不是虚拟的,所以Moq无法做到这一点。
我认为唯一可行的解决方案是使用虚方法编写XmlSerializer的Facade。类似的东西:
public class CustomXmlSerializer
{
private XmlSerializer serializer;
public CustomXmlSerializer(XmlSerializer serializer)
{
this.serializer = serializer;
}
public virtual void Serialize(Stream stream, object o)
{
serializer.Serialize(stream, o);
}
public virtual object Deserialize(Stream stream)
{
return serializer.Deserialize(stream);
}
}
我想知道这是不是一种好的做法。另外,有没有其他方法可以做到这一点?
答案 0 :(得分:2)
使用两种方法(Serialize和Deserialize)创建一个接口,例如IMySerializable
,并像这样声明CustomXmlSerializer:
class CustomXmlSerializer : IMySerializable {
...
}
比Moq不应该有问题。
或者您可以使用其他IL库,例如typemock(http://www.typemock.com/)。这种类型是付费的。其他选择是http://www.telerik.com/freemocking.aspx。