为了验证该方法被调用,我们应该使该方法可验证:
// arrange
mock
.Setup(foo => foo.SomeMethod("param1", "param2", "param3", "param4"))
.Verifiable();
然后我们可以这样做:
// assert
mock
.Verify(foo => foo.SomeMethod("param1", "param2", "param3", "param4"));
我想避免这种重复的代码......在复杂测试的情况下,代码会变得过载且不可读。
所以我的问题是如何使排列部分中的所有方法(具有任何参数)都可验证?
注意事项
我知道VerifyAll()
:
// assert
mock.VerifyAll();
但它有一个缺点:实际验证的内容并不明显。所以我正在寻找一些替代方案。
最佳答案
您可以使用模拟工厂(请参阅“自定义模拟行为”here)
var factory = new MockFactory(MockBehavior.Strict) { DefaultValue = DefaultValue.Mock };
var fooMock = factory.Create<IFoo>();
var barMock = factory.Create<IBar>();
// Verify all verifiable expectations on all mocks created through the factory
factory.Verify();
编辑
在您的示例中,您甚至可以避免使用设置,因为您没有设置任何东西,无需将其标记为可验证。简而言之:删除设置并保留验证
关于c# - 如何使用 Moq 使所有方法都可验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25774661/