c# - 如何使用 Moq 使所有方法都可验证

标签 c# unit-testing nunit moq

为了验证该方法被调用,我们应该使该方法可验证:

// 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/

相关文章:

C# - 关键字用法 virtual+override 与 new

c# - 使两个列表相互连接

c# - 在 C# 中加载 TensorFlow 模型

c# - 如何将此文件加载到 NUnit 测试中?

nunit - 在 VS2010 中使用 MS Test ClassInitialize() 和 TestInitialize() 而不是 NUnit

c# - 已编译的单声道缺少默认 .NET 库 - 未定义或导入 System.Object

.net - 未在使用Microsoft Fakes的C#测试项目中的/reference选项“/引用选项”中指定错误 "The extern alias ' snh'

python - Pydev 有选择地运行单元测试

unit-testing - 如何在开 Jest 中链接具有多个异常的 promise

c# - Moq 一个类并仍然使用它的方法