如何验证是否调用了Microsoft Fakes(beta)存根/填充程序(如Rhino Mocks中的AssertWasCalled)?

lan*_*nce 9 unit-testing rhino-mocks microsoft-fakes

我正在使用Visual Studio 11中的Microsoft Fakes测试版.如何验证我的被测系统是否调用了依赖项的方法?

lan*_*nce 12

由于验证功能未包含在Microsoft Fakes Beta中,因此下面的代码是对依赖项上的方法是否被调用的基本测试.您可以增强true测试以测试参数值或正确调用的其他条件.

测试:

[TestMethod]
public void TestMethod1()
{
    var secondDoItCalled = false;
    var secondStub = new Fakes.ShimSecond();
    secondStub.DoIt = () => { secondDoItCalled = true; };
    var first = new First(secondStub);
    first.DoIt();
    Assert.IsTrue(secondDoItCalled);
}
Run Code Online (Sandbox Code Playgroud)

类别:

public class First
{
    readonly Second _second;
    public First(Second second) { _second = second; }
    public void DoIt() { 
        //_second.DoIt();
    }
}

public class Second {public void DoIt(){}}
Run Code Online (Sandbox Code Playgroud)

取消注释上面的行以查看测试通过.


cec*_*lip 8

使用Microsoft Fakes框架进行行为验证的另一个选项是使用Microsoft.QualityTools.Testing.Fakes.Stubs命名空间中包含的StubObserver类.使用该框架,您可以为依赖项生成存根.然后在Stub上,您可以将InstanceObserver属性设置为新的StubObserver.使用StubObserver类,您可以"查询"对依赖项进行的方法调用.您的测试方法如下所示

//Arrange
var dependency = new StubIDependency { InstanceObserver = new StubObserver() };
var sut = new SystemClass(dependency);

// Act
sut.DoSomething();

// Assert
var observer = (StubObserver)dependency.InstanceObserver;      
Assert.IsTrue(
    observer.GetCalls().Any(call => call.StubbedMethod.Name == "DoSomething"));
Run Code Online (Sandbox Code Playgroud)