从Moq调用操作

时间:2013-06-18 10:54:09

标签: callback action moq anonymous func

我有一个服务,其方法需要两个Action,一个用于成功,一个用于失败。每个Action都会获取一个包含其他信息的Result参数...

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

我正在为依赖于该服务的类编写单元测试,我想测试这个类在onSuccess(...)onFailure(...)回调中做了正确的事情。这些是私有或匿名方法,因此如何设置模拟服务以调用Action?

1 个答案:

答案 0 :(得分:12)

您可以使用Callback方法(另请参阅Moq quickstart Callbacks部分)来配置回调,该回调使用模拟方法调用(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
        });