如何填充虚拟方法?
How to shim virtual method?
如何处理这种情况,当 type 有虚方法时我需要提供一个 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。
设法通过创建 child class
和覆盖 Serialize
方法来解决这个问题。
class ServiceResponseChild : ServiceResponse
{
public override string Serialize()
{
return "orgUnitsResponse serialized";
}
}
稍后在我的测试中我使用这个 child class
.
...
ServiceResponse response = new ServiceResponseChild();
target.SaveResponseAsXml(response);
...
虽然这对我有用,但我会对其他利用 MS Fakes 功能的解决方案感兴趣(如果可能的话)。
如何处理这种情况,当 type 有虚方法时我需要提供一个 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。
设法通过创建 child class
和覆盖 Serialize
方法来解决这个问题。
class ServiceResponseChild : ServiceResponse
{
public override string Serialize()
{
return "orgUnitsResponse serialized";
}
}
稍后在我的测试中我使用这个 child class
.
...
ServiceResponse response = new ServiceResponseChild();
target.SaveResponseAsXml(response);
...
虽然这对我有用,但我会对其他利用 MS Fakes 功能的解决方案感兴趣(如果可能的话)。