【发布时间】:2021-07-26 19:56:48
【问题描述】:
我正在尝试使用 Moq 验证方法调用,但我无法完全正确地获取语法。目前,我已将此作为我的验证:
repository.Verify(x => x.ExecuteNonQuery("fav_AddFavorites", new
{
fid = 123,
inputStr = "000456"
}), Times.Once());
代码可以编译,但测试失败并出现错误:
Expected invocation on the mock once, but was 0 times:
x => x.ExecuteNonQuery("fav_AddFavorites", new <>f__AnonymousType0<Int32, String>(123, "000456"))
No setups configured.
Performed invocations:
IRepository.ExecuteNonQuery("fav_AddFavorites", { fid = 123, inputStr = 000456 })
如何验证方法调用并匹配匿名类型的方法参数?
更新
回答问题:
我正在尝试验证方法是否被调用以及参数是否正确。
我要验证的方法的签名是:
int ExecuteNonQuery(string query, object param = null);
设置代码很简单:
repository = new Mock<IRepository>();
更新 2
看起来这是 Moq 以及它如何处理 .Net 中的匿名类型的问题。 Paul Matovich 发布的代码运行良好,但是,一旦代码和测试位于不同的程序集中,测试就会失败。
【问题讨论】:
-
你也可以发布设置代码吗?
-
您能否发布您尝试验证的方法调用的签名,以及您是否尝试验证传递给该方法的参数,或者仅在它被调用时验证?
-
Rob 我测试了 Pauls 更新的答案,它适用于不同的程序集。也许你应该接受他的回答。
标签: moq