1

我有一个依赖于 XmlSerializer 的类。我想模拟 XmlSerializer 来验证它的方法是否被正确调用。但是,因为 Serialize() 和 Deserialize() 方法不是虚拟的,所以 Moq 无法做到这一点。

我认为可行的唯一解决方案是使用虚拟方法编写 XmlSerializer 的外观。就像是 :

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);
    }
}

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

4

1 回答 1

2

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

 class CustomXmlSerializer : IMySerializable {
   ...
 }

比起订量应该没有问题。

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

于 2013-05-31T17:48:26.087 回答