2013-06-18 84 views
2

我有一種方法需要兩個Action s的服務,一個用於成功,一個用於失敗。每個Action採用包含附加信息的結果參數...從Moq調用操作

void AuthoriseUser(AuthDetails loginDetails, 
    Action<AuthResult> onSuccess, 
    Action<AuthResult> onFailure); 

我正在寫一類是依賴於該服務的單元測試,我想測試這個類中做正確的事onSuccess(...)onFailure(...)回調。這些是私人或匿名方法,那麼如何設置模擬服務來調用任一操作?

回答

10

可以使用Callback方法(也看到Moq quickstart回調部分)來配置它被稱爲用模擬的方法調用(AuthoriseUser)的原始參數的回調,所以你可以在那裏打電話給你onSuccessonFailure回調:

var moq = new Mock<IMyService>(); 
moq.Setup(m => m.AuthoriseUser(It.IsAny<AuthDetails>(), 
           It.IsAny<Action<AuthResult>>(), 
           It.IsAny<Action<AuthResult>>())) 
    .Callback<AuthDetails, Action<AuthResult>, Action<AuthResult>>(
    (loginDetails, onSuccess, onFailure) => 
     { 
      onSuccess(new AuthResult()); // fire onSuccess 
      onFailure(new AuthResult()); // fire onFailure 
     }); 
+0

完美,謝謝! – GoatInTheMachine