如何填充虚拟方法?

How to shim virtual method?

如何处理这种情况,当 type 有虚方法时我需要提供一个 Shim 来代替?

我有数据合同,代码为:

public class ServiceResponse
{
    ...
    public virtual string Serialize() {...}
    ...
}

在我的代码中调用了 response.Serialize(),其中 responseServiceResponse 的类型。

在我的单元测试中,我想做这样的事情:

ShimServiceResponse.Serialize = () => { return "serialized response"; };

但是 Serialize 方法是 virtual,类型 ShimServiceResponse 不提供 Serialize 方法是 "Shimmed"。

解决这种情况的最佳方法是什么?谢谢。

我正在使用 Microsoft Fakes Framework、.NET 4.5.2 和 VS 2015。

设法通过创建 child class 和覆盖 Serialize 方法来解决这个问题。

class ServiceResponseChild : ServiceResponse
{
    public override string Serialize()
    {
        return "orgUnitsResponse serialized";
    }
}

稍后在我的测试中我使用这个 child class.

...
ServiceResponse response = new ServiceResponseChild();
target.SaveResponseAsXml(response);
...

虽然这对我有用,但我会对其他利用 MS Fakes 功能的解决方案感兴趣(如果可能的话)。