犀牛模拟桩异步方法

12

我有一个ViewModel,在构造函数中调用一个异步void方法来添加到集合

public MyViewModel(ICommandHandler commandHandler)
{
    _commandHandler = commandHandler;
    SetupCollection();
}


private async void SetupCollection()
{
    var commands = GetCommands();

    foreach (var command in commands)
    {
        var response = await _commandHandler.ExecuteGetReply(command);

        if (response != null)
           Response.Add(response);
    }
}

我应该如何存根_commandHandler.ExecuteGetReply()命令以返回一个值?

此外,在构造函数中具有这样的功能是否可以?还是应该放在override void OnActivate()调用中(我正在使用Caliburn Micro)?

1个回答

25

ICommandHandler.ExecuteGetReply 似乎返回一个 Task<Response>,因此您可以执行类似以下操作:

ICommandHandler.ExecuteGetReply 函数的返回类型是 Task<Response>,因此您可以使用如下代码:

ICommand commandArg;
Response response;
stubHandler.Stub(h => h.ExecuteGetReply(commandArg)).Return(Task.FromResult(response));

然而,我不会在构造函数中调用异步的 void 方法,因为您将无法在其完成时得到通知。


如果 commandHandler.ExecuteGetReply 抛出异常会发生什么? - Paulo Morgado

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接