用参数模拟方法

时间:2012-03-29 17:39:30

标签: c# mocking moq

我正在注入依赖项CheckCompatibRepository。我正在嘲笑一个方法IsCompatible,它有一个列表作为第三个参数。

 var mockRepositoryCheckCompatib = new Mock<ICheckCompatibilityActDoer>();
            mockRepositoryCheckCompatib.Setup(c => c.IsCompatible(doer, activity, listActivitiesPreDispatched)).Returns(true);

问题在于清单。它由我正在测试的类填充。诚实地说,我不关心那个参数,我想模仿IsCompatible忽略那个参数。那可能吗?

否则,模拟只是不会捕获方法调用。为了简化问题,我尝试将列表作为注入依赖项发送到我的班级。它一直有效,直到列表开始填充,然后模拟停止捕获调用。

你会怎么嘲笑这个?

1 个答案:

答案 0 :(得分:11)

由于您使用的是Moq,因此您正在寻找It.IsAny<T>方法。由于您正在更改列表的值,因此传递对象实例不是正确的方法,因为您必须不断设置Mock来处理新参数。

以下示例将允许mock接受List<T>类型的任何参数值。为了这个例子,我们将使用List<int>

 var mockRepositoryCheckCompatib = new Mock<ICheckCompatibilityActDoer>();
 mockRepositoryCheckCompatib.Setup(c => c.IsCompatible(doer, activity, It.IsAny<List<int>>())).Returns(true);

编辑:我没有看到bzlm之前的评论,这基本上回答了这个问题。如果他发布了一个,请接受他的回答,我不是故意要偷走它。