Moq:一个方法不是虚拟的类的Facade

时间:2013-05-31 17:34:02

标签: c# virtual moq

我有一个依赖于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);
    }
}

我想知道这是不是一种好的做法。另外,有没有其他方法可以做到这一点?

1 个答案:

答案 0 :(得分:2)

使用两种方法(Serialize和Deserialize)创建一个接口,例如IMySerializable,并像这样声明CustomXmlSerializer:

 class CustomXmlSerializer : IMySerializable {
   ...
 }

比Moq不应该有问题。

或者您可以使用其他IL库,例如typemock(http://www.typemock.com/)。这种类型是付费的。其他选择是http://www.telerik.com/freemocking.aspx