Jas*_*ans 4 .net microsoft-fakes
我正在使用MS Fakes。
进行以下课程:
public class Person
{
public void SaveQuotes()
{
DoSomething();
}
private void DoSomething()
{
Console.WriteLine("Original DoSomething called.");
}
}
Run Code Online (Sandbox Code Playgroud)
和这个测试:
[TestMethod]
public void TestMethod1()
{
using (ShimsContext.Create())
{
var sut = new ShimPerson();
sut.DoSomething = () => { Console.WriteLine("Called from test"); };
sut.Instance.SaveQuotes();
}
}
Run Code Online (Sandbox Code Playgroud)
当我运行测试时,该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();
}
}
Run Code Online (Sandbox Code Playgroud)
现在运行测试时,它确实执行了原始方法SaveQuotes(),但副作用是,它也运行了原始DoSomething()方法。
我如何运行原始SaveQuotes()但伪造的文件DoSomething()。TypeMock会.CallOriginal在设置伪造品时执行此操作,但我无法在MS Fakes中看到如何做。
好,我知道了。
我必须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();
}
}
Run Code Online (Sandbox Code Playgroud)
这告诉Fakes SaveQuotes()在仍然使用伪造的DoSomething()方法的同时调用原始方法。我发现这是一个很好的参考:
| 归档时间: |
|
| 查看次数: |
508 次 |
| 最近记录: |