在 C# 中使用 Moq 验证
Using Moq to verify in C#
我正在尝试模拟数据库,以便验证是否调用了保存方法。我有一个保存到数据库的项目,它需要一个要保存的对象列表和一个连接字符串。
this._database.Save<Constraint>(constraints, "DEFAULT");
当我调试时,我可以看到测试成功地进入了我的带有模拟数据库的项目,并且它恰好命中保存行一次。
在我的测试项目中,我创建了一个 class 调用保存方法的实例,创建并创建了一个模拟数据库,并使用 .Setup 作为保存方法。
private Mock<IDatabase> _mockDatabase;
...
_mockDatabase = new Mock<IDatabase>();
_mockDatabase.Setup(d => d.Save<Types.Constraint>(It.IsAny<Types.Constraint>(), It.IsAny<String>()));
然后在我的测试方法中,我调用 .Verify 以确保调用了一次保存。
_mockDatabase.Verify(d => d.Save<Constraint>(It.IsAny<Constraint>(), It.IsAny<String>()), Times.Once);
但是此验证测试失败。有谁知道我该如何解决这个问题?感谢任何 help/ideas!
Moq.MockException:
Expected invocation on the mock once, but was 0 times: d => d.Save(It.IsAny(), It.IsAny())
Configured setups:
d => d.Save(It.IsAny(), It.IsAny()), Times.Never
Performed invocations:
IDatabase.Save(System.Collections.Generic.List`1[Types.Constraint], "DEFAULT")
使用您的代码,您发送的是 List<Constraint>
而您期望的是 Constraint
所以:
将设置更改为:
_mockDatabase.Setup(d => d.Save<Constraint>(It.IsAny<List<Constraint>>(), It.IsAny<String>()));
并验证到:
_mockDatabase.Verify(d => d.Save<Constraint>(It.IsAny<List<Constraint>>(), It.IsAny<String>()), Times.Once);
它使用 List<Constraint>
而不是 Constraint
调用保存方法,这就是它失败的原因。您可以在调用 Save
之前更改预期输入或验证您的代码
我正在尝试模拟数据库,以便验证是否调用了保存方法。我有一个保存到数据库的项目,它需要一个要保存的对象列表和一个连接字符串。
this._database.Save<Constraint>(constraints, "DEFAULT");
当我调试时,我可以看到测试成功地进入了我的带有模拟数据库的项目,并且它恰好命中保存行一次。
在我的测试项目中,我创建了一个 class 调用保存方法的实例,创建并创建了一个模拟数据库,并使用 .Setup 作为保存方法。
private Mock<IDatabase> _mockDatabase;
...
_mockDatabase = new Mock<IDatabase>();
_mockDatabase.Setup(d => d.Save<Types.Constraint>(It.IsAny<Types.Constraint>(), It.IsAny<String>()));
然后在我的测试方法中,我调用 .Verify 以确保调用了一次保存。
_mockDatabase.Verify(d => d.Save<Constraint>(It.IsAny<Constraint>(), It.IsAny<String>()), Times.Once);
但是此验证测试失败。有谁知道我该如何解决这个问题?感谢任何 help/ideas!
Moq.MockException:
Expected invocation on the mock once, but was 0 times: d => d.Save(It.IsAny(), It.IsAny())Configured setups:
d => d.Save(It.IsAny(), It.IsAny()), Times.NeverPerformed invocations:
IDatabase.Save(System.Collections.Generic.List`1[Types.Constraint], "DEFAULT")
使用您的代码,您发送的是 List<Constraint>
而您期望的是 Constraint
所以:
将设置更改为:
_mockDatabase.Setup(d => d.Save<Constraint>(It.IsAny<List<Constraint>>(), It.IsAny<String>()));
并验证到:
_mockDatabase.Verify(d => d.Save<Constraint>(It.IsAny<List<Constraint>>(), It.IsAny<String>()), Times.Once);
它使用 List<Constraint>
而不是 Constraint
调用保存方法,这就是它失败的原因。您可以在调用 Save