如何填充虚拟方法?

时间:2016-02-09 14:26:39

标签: c# unit-testing microsoft-fakes

如何应对情况,当类型得到虚拟方法而我需要提供一个Shim?

我有数据合同,代码为:

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

在我的代码中,可以调用response.Serialize(),其中response的类型为ServiceResponse

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

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

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

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

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

1 个答案:

答案 0 :(得分:0)

通过创建子class并覆盖Serialize方法来管理它。

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

在我的测试中,我正在使用这个孩子class

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

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