如何存根方法的第二次调用?

时间:2014-03-03 22:50:57

标签: c# .net unit-testing microsoft-fakes

使用MS Fakes,有没有办法为第一次调用stubbed方法提供方法体,并为同一方法的第二次调用提供不同的方法体?

我正在测试一个调用classA.MyMethod()两次的方法。我在单元测试中存在classA.MyMethod()。但这意味着对MyMethod()的两次调用都将返回相同的内容。

我想要使用存根方法来执行此操作:

public void MainMethod()
{
  var result1 = classA.MyMethod(); //return null
  ...
  var result2 = classA.MyMethod(); //return x
}

1 个答案:

答案 0 :(得分:1)

您可以修改方法调用中的垫片,在第一个垫片完成后替换它:

[TestMethod]
public void TestMethod1()
{
    using (ShimsContext.Create())
    {
        Something.Fakes.ShimClassA.MethodA = () =>
        {
            Something.Fakes.ShimClassA.MethodA = () =>
            {
                return "Second";
            };
            return "first";
        };
        var f = Something.ClassA.MethodA();      // first
        var s = Something.ClassA.MethodA();      // second
        var t = Something.ClassA.MethodA();      // second
    }

    var orig = Something.ClassA.MethodA();      // This will use the original implementation of MethodA

}