我的测试单元中有以下代码:
transaction.QueueCommand(x => x.AddItemToSet("key", "value"));
我想验证这是使用Moq调用的(我喜欢Moq)。
我在单元测试中设置了以下验证:
m_MockTransaction.Verify(x => x.QueueCommand(y => y.AddItemToSet("key", "value")));
不幸的是,这会产生以下异常:
抛出异常:' System.NotSupportedException'在Moq.dll中
其他信息:不支持的表达式:y => y.AddItemToSet("键&#34 ;, "值&#34)
我理解这是因为Moq无法解开代理以确定调用是否匹配。 我想知道是否有人有办法解决这个限制,最好不要太讨厌。
我已经看到了这个答案https://stackoverflow.com/a/1120836/282090,它建议将Func转换为字符串,然后可以对其进行比较(这不适用于Action。不幸的是,我的测试中的代码与我的不一样被测单位。
例如,我会对" key"," value"进行验证。而代码可以传递变量theKey,theValue。
我们非常感谢您确保我可以验证电话的任何帮助。
答案 0 :(得分:0)
在这个例子中,我发现找出如何做Moq团队没有实现的事情并且将此单元测试变成集成测试,验证数据库中是否存在正确的数据是不值得的。
如果有人有更好的解决方案,我可以改变它。