我有一个服务,其方法需要两个Action
,一个用于成功,一个用于失败。每个Action
都会获取一个包含其他信息的Result参数...
void AuthoriseUser(AuthDetails loginDetails,
Action<AuthResult> onSuccess,
Action<AuthResult> onFailure);
我正在为依赖于该服务的类编写单元测试,我想测试这个类在onSuccess(...)
和onFailure(...)
回调中做了正确的事情。这些是私有或匿名方法,因此如何设置模拟服务以调用Action?
答案 0 :(得分:12)
您可以使用Callback
方法(另请参阅Moq quickstart Callbacks部分)来配置回调,该回调使用模拟方法调用(AuthoriseUser
)的原始参数进行调用,以便您可以在那里拨打onSuccess
和onFailure
回调:
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
});