我在Moq看到了Verifiable()的目的是什么?在我的脑海里有这个问题.需要你的帮助解释一下.
ema*_*ema 47
VerifyAll()用于验证是否已满足所有期望.假设你有:
myMock.Setup(m => m.DoSomething()).Returns(1);
mySut.Do();
myMock.VerifyAll(); // Fail if DoSomething was not called
Run Code Online (Sandbox Code Playgroud)
HTH
Ole*_*egI 13
我将尝试完成@ema的答案,可能会为读者提供更多见解。想象一下,你有嘲笑的对象,这是你的依赖SUT。假设它有两种方法,并且您想要对其进行设置,以免出现任何异常或为sut创建各种方案:
var fooMock = new Mock<Foo>();
fooMock.Setup(f => f.Eat()).Returns("string");
fooMock.Setup(f => f.Bark()).Returns(10);
_sut = new Bar(fooMock.Object);
Run Code Online (Sandbox Code Playgroud)
这就是安排步骤。现在,您要运行一些要实际测试的方法(现在执行):
_sut.Test();
Run Code Online (Sandbox Code Playgroud)
现在,您将断言同VerifyAll():
fooMock.VerifyAll();
Run Code Online (Sandbox Code Playgroud)
您将在这里测试什么?您将测试是否调用了设置方法。在这种情况下,如果未调用任何一个,您将获得异常,并且测试将失败。因此,实际上,您需要混合安排步骤和声明步骤。另外,您无法检查它被调用了多少次(可以在函数中调用带有属性的参数):Foo.Eat() or Foo.Bark().VerifyParamNameEat()
fooMock.Verify(f => f.Eat(It.Is<Param>(p => p.Name == "name")), Times.Once);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
23883 次 |
| 最近记录: |