8

我有一个服务,其方法需要两个Actions,一个代表成功,一个代表失败。每个都Action接受一个包含附加信息的 Result 参数...

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

我正在为依赖于该服务的类编写单元测试,并且我想测试这个类在onSuccess(...)onFailure(...)回调中是否正确。这些是私有方法或匿名方法,那么如何设置模拟服务来调用任一操作?

4

1 回答 1

17

您可以使用该Callback方法(另请参阅Moq 快速入门回调部分)配置一个回调,该回调使用模拟方法调用 ( 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
        });
于 2013-06-18T21:32:23.023 回答