2014-03-05 100 views
0

一個方法,我嘲笑我的控制器的方法和我的控制器看起來像這樣模擬與參數

我的控制器:

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 

    } 

,我創建這個樣子的

public interface IRFacade 
{   
    int ActionFunction(int[] arrayOfNum); 
} 

接口IRFacade當我測試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 [] varaible fakeInput我聲明反對,只是傳遞一個參數類型r.ActionFunction(int[] avaraible)當我設置了模擬?

回答

5

當你設置你的方法是這樣的:

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

你設置它返回5 如果,只有如果,編號爲1,2和3的數組傳遞作爲論據。

如果你想讓你的方法返回5的任何輸入,你應該使用It.IsAny<T>()來代替。

MockFacade.Setup(r => r.ActionFunction(It.IsAny<int[]>())).Returns(5); 
0

在這裏,你想要的1,2,3

MockFacade.Setup(r => r.ActionFunction(new int[]{1,2,3})).Returns(aNumber); 

array如果您想要的任何intarray

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);