我想用MS Fakes覆盖会调用基本代码但我无法找到如何做到这一点。这是一个例子
给出
public class Potato
{
public virtual string Peel(PeelingMethod peelingMethod)
{
return "potato peeled";
}
}
当我创建Stub
时new StubPotato()
{
PeelPeelingMethod = (p) =>
{
//Doesn't compile!
base.Peel(p);
Console.WriteLine("Hello world");
}
}
我怎样才能实现这一点,我对MS Fakes框架很陌生,所以也许我不了解它。
答案 0 :(得分:0)
我找到了一个解决方案,它非常恶心,但它确实有效。如果有人需要,我会把它放在这里。我将重用我的例子(我编辑,因为我没有使用返回void的方法测试这个答案)
var stubPotato = new StubPotato()
{
PeelPeelingMethod = (p) =>
{
//Base method call
MethodInfo methodInfo = typeof(Potato).GetMethod("Peel", BindingFlags.Instance | BindingFlags.Public);
var methodPtr = methodInfo.MethodHandle.GetFunctionPointer();
var baseMethod = (Func<PeelingMethod,string>)Activator.CreateInstance(typeof(Func<PeelingMethod,string>), stubPotato , methodPtr);
string baseResult = baseMethod(p);
//Code for the "override"
Console.WriteLine("Hello world");
}
}