我正在尝试模拟数据库,以便我可以验证是否已调用save方法。我有一个保存到数据库的项目,它包含要保存的对象列表和连接字符串。
this._database.Save<Constraint>(constraints, "DEFAULT");
当我调试时,我可以看到测试使用模拟数据库成功进入我的项目,并且它恰好一次点击保存行。
在我的测试项目中,我创建了一个调用save方法的类实例,创建并创建了一个模拟数据库,并使用.Setup作为save方法。
private Mock<IDatabase> _mockDatabase;
...
_mockDatabase = new Mock<IDatabase>();
_mockDatabase.Setup(d => d.Save<Types.Constraint>(It.IsAny<Types.Constraint>(), It.IsAny<String>()));
然后在我的测试方法中,我调用.Verify以确保一次调用save。
_mockDatabase.Verify(d => d.Save<Constraint>(It.IsAny<Constraint>(), It.IsAny<String>()), Times.Once);
然而,此验证测试失败。有谁知道我怎么解决这个问题?感谢您的任何帮助/想法!
Moq.MockException:
在模拟上预期调用一次,但是是0次:d =&gt; d.Save(It.IsAny(),It.IsAny())配置设置:
d =&gt; d.Save(It.IsAny(),It.IsAny()),Times.Never执行调用:
IDatabase.Save(System.Collections.Generic.List`1 [Types.Constraint],“DEFAULT”)
答案 0 :(得分:2)
使用您的代码,您发送的内容为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);
答案 1 :(得分:1)
它使用List<Constraint>
而不是Constraint
调用save方法,这就是它失败的原因。您可以在调用Save