我正在嘲笑我的控制器方法,我的控制器看起来像这样
我的控制器:
public class PController : BaseController
{
readonly IRFacade _repository;
public PController()
{
_repository = new RiFacade();
}
[CLSCompliant(false)]
public PController(IRFacade repositories)
{
if (repositories == null) throw new ArgumentNullException("repositories");
_repository = repositories;
}
public aMethod(String Id){
int[] arraynum = convert id to int[]
int numberthis = _repository.ActionFunction(arraynum);
..return stuff
}
我创建的界面IRFacade
看起来像这样
public interface IRFacade
{
int ActionFunction(int[] arrayOfNum);
}
当我测试aMethod
并且我必须模仿_repository
时,我就这样做了设置
var MockFacade = new Mock<IRFacade>();
// here fakeinput is a int[] varaible and aNumber is a int variable
MockFacade.Setup(r => r.ActionFunction(fakeinput)).Returns(aNumber);
我的问题是,为什么我必须传递一个实际的int []变量fakeInput
我声明反对只是在我设置模拟时传入参数类型r.ActionFunction(int[] avaraible)
? / p>
答案 0 :(得分:5)
当你设置这样的方法时:
MockFacade.Setup(r => r.ActionFunction(new[] {1,2,3})).Returns(5);
您将其设置为返回5 if ,仅 if ,数字为1,2和3的数组作为参数传递。
如果您希望自己的方法为任何输入返回5,则应使用It.IsAny<T>()
代替。
MockFacade.Setup(r => r.ActionFunction(It.IsAny<int[]>())).Returns(5);
答案 1 :(得分:0)
在这里,你想要array
1,2,3
MockFacade.Setup(r => r.ActionFunction(new int[]{1,2,3})).Returns(aNumber);
如果您想要int
array
:
MockFacade.Setup(r => r.ActionFunction(It.IsAny<int[]>())).Returns(aNumber);
如果您想确保array
至少有1个,但您可以通过lambda
始终建立更多条件:
MockFacade.Setup(r => r.ActionFunction(It.Is<int[]>(a=>a.Contains(1)))).Returns(aNumber);