Moq - 如何验证动作<t>?

时间:2015-11-26 22:40:40

标签: unit-testing tdd moq

我的测试单元中有以下代码:

transaction.QueueCommand(x => x.AddItemToSet("key", "value"));

我想验证这是使用Moq调用的(我喜欢Moq)。

我在单元测试中设置了以下验证:

m_MockTransaction.Verify(x => x.QueueCommand(y => y.AddItemToSet("key", "value")));

不幸的是,这会产生以下异常:

  

抛出异常:&#39; System.NotSupportedException&#39;在Moq.dll中

     

其他信息:不支持的表达式:y =&gt; y.AddItemToSet(&#34;键&#34 ;,   &#34;值&#34)

我理解这是因为Moq无法解开代理以确定调用是否匹配。 我想知道是否有人有办法解决这个限制,最好不要太讨厌。

我已经看到了这个答案https://stackoverflow.com/a/1120836/282090,它建议将Func转换为字符串,然后可以对其进行比较(这不适用于Action。不幸的是,我的测试中的代码与我的不一样被测单位。

例如,我会对&#34; key&#34;,&#34; value&#34;进行验证。而代码可以传递变量theKey,theValue。

我们非常感谢您确保我可以验证电话的任何帮助。

1 个答案:

答案 0 :(得分:0)

在这个例子中,我发现找出如何做Moq团队没有实现的事情并且将此单元测试变成集成测试,验证数据库中是否存在正确的数据是不值得的。

如果有人有更好的解决方案,我可以改变它。