模拟一个带参数的方法
问题描述:
我正在注入一个依赖项CheckCompatibRepository
。我在嘲笑一个方法IsCompatible
,它有一个列表作为第三个参数。模拟一个带参数的方法
var mockRepositoryCheckCompatib = new Mock<ICheckCompatibilityActDoer>();
mockRepositoryCheckCompatib.Setup(c => c.IsCompatible(doer, activity, listActivitiesPreDispatched)).Returns(true);
问题是该列表。它由我正在测试的课程填充。我真的很关心这个参数,我想模拟IsCompatible
忽略那个参数。那可能吗?
否则,嘲笑只是不会捕捉方法调用。为了缓解这些问题,我尝试了将这个列表作为我的类中的注入依赖项。它一直运行,直到列表开始填充,然后模拟停止捕获电话。
你会怎样嘲笑这件事?
答
由于您使用的是Moq,因此您正在寻找It.IsAny<T>
方法。由于您要更改列表的值,因此将对象实例传递给对象并不是正确的方法,因为您必须不断设置模拟来处理新参数。
以下示例将允许模拟接受List<T>
类型的任何参数值。为了这个例子,我们将使用List<int>
。
var mockRepositoryCheckCompatib = new Mock<ICheckCompatibilityActDoer>();
mockRepositoryCheckCompatib.Setup(c => c.IsCompatible(doer, activity, It.IsAny<List<int>>())).Returns(true);
编辑:我没有看到bzlm的评论,从根本上回答了这个问题。如果他发布了一个,请接受他的回答,我不是故意要挖。
+5
我的评论就是这样的:一个快速开车的笔记最多指出OP和未来的回答者朝着正确的方向,甚至不知道我是否正确。在SO上发布答案永远不会被视为偷猎。即使两个几乎完全相同的答案也完全没问题 - 社区会投票选择哪一个更好。所以你做了正确的事情。 :) – bzlm 2012-03-30 14:59:02
是不是'It.IsAny'等?这不在文档中涵盖了吗? – bzlm 2012-03-29 17:48:38