我正在使用MS Fakes。
提供以下课程:
public class Person
{
public void SaveQuotes()
{
DoSomething();
}
private void DoSomething()
{
Console.WriteLine("Original DoSomething called.");
}
}
和这个测试:
[TestMethod]
public void TestMethod1()
{
using (ShimsContext.Create())
{
var sut = new ShimPerson();
sut.DoSomething = () => { Console.WriteLine("Called from test"); };
sut.Instance.SaveQuotes();
}
}
当我运行测试时,基本上跳过sut.Instance.SaveQuotes()
方法,因为该方法已经过匀删。我想要的是执行原始的SaveQuotes()
方法。所以我尝试了这个:
[TestMethod]
public void TestMethod1()
{
using (ShimsContext.Create())
{
var sut = new ShimPerson();
sut.DoSomething = () => { Console.WriteLine("Called from test"); };
sut.SaveQuotes = () => { ShimsContext.ExecuteWithoutShims(() => sut.Instance.SaveQuotes()); };
sut.Instance.SaveQuotes();
}
}
当我现在运行测试时,它会执行原始SaveQuotes()
,但作为副作用,它也会运行原始的DoSomething()
方法。
如何运行原始SaveQuotes()
但是假冒DoSomething()
。设置假货时,TypeMock会执行此.CallOriginal
选项,但我无法看到如何在MS Fakes中执行相同操作。
答案 0 :(得分:4)
好的,我现在知道了。
我必须像这样更改ShimBehaviors.InstanceBeahviour
属性:
[TestMethod]
public void TestMethod1()
{
using (ShimsContext.Create())
{
var sutShim = new ShimPerson();
sutShim.DoSomething = () => { Console.WriteLine("Called from test"); };
sutShim.InstanceBehavior = ShimBehaviors.Fallthrough;
sutShim.Instance.SaveQuotes();
}
}
这告诉Fakes调用原始的SaveQuotes()
方法,同时仍然使用伪造的DoSomething()
方法。我发现这是一个很好的参考: