用参数模拟一个方法

Jac*_*hor 0 c# unit-testing moq mocking

我在嘲笑我的控制器方法,我的控制器看起来像这样

我的控制器:

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

    }
Run Code Online (Sandbox Code Playgroud)

IRFacade我创建的界面看起来像这样

public interface IRFacade 
{        
    int ActionFunction(int[] arrayOfNum);
}
Run Code Online (Sandbox Code Playgroud)

当我测试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);
Run Code Online (Sandbox Code Playgroud)

我的问题是,为什么我必须传递一个实际的int []变量fakeInput,我声明反对只是在r.ActionFunction(int[] avaraible)我设置模拟时传入参数类型?

dca*_*tro 5

当你设置这样的方法时:

MockFacade.Setup(r => r.ActionFunction(new[] {1,2,3})).Returns(5);
Run Code Online (Sandbox Code Playgroud)

如果且仅具有数字1,2和3的数组作为参数传递时,您将其设置为返回5 .

如果您希望您的方法为任何输入返回5 ,则应该使用It.IsAny<T>().

MockFacade.Setup(r => r.ActionFunction(It.IsAny<int[]>())).Returns(5);
Run Code Online (Sandbox Code Playgroud)