因此,我在测试以下场景时遇到了问题:
ICommand LoginCommand;
public LoginViewModel()
{
LoginCommand = new Command(async () => await LoginCommandAction());
}
private async Task LoginCommandAction()
{
var response = await _tokenService.GetToken(_user, _password, token);
}
那是我的ViewModel。现在,在我的ViewModel测试中,我希望能够在LoginCommand上调用execute
,然后等待 GetToken完成,这样我就可以断言它的结果。
我试着只调用execute()
,但是测试在调用之前就结束了。
我也尝试过:
public async Task TestMethod() => await Task.Run(() => Vm.LoginCommand.Execute(null));
但这也不管用。我相信我必须在我的操作上返回一些东西,但我不确定是什么。
发布于 2018-05-28 20:10:10
测试类似这样的东西:
public ICommand LoginCommand
{
get
{
return new Command(async () =>
{
await LoginCommandAction();
});
}
}
async Task LoginCommandAction()
{
await _tokenService.GetToken(_user, _password, token).ContinueWith((arg) =>
{
if(arg.IsCompleted)
{
...
}
});
}
确保视图的BindingContext是正确的,并且.xaml中的绑定具有以下形式:
Command = "{Binding LoginCommand}"
发布于 2018-05-29 02:00:46
不能将await关键字用于ICommand.Execute方法。
https://stackoverflow.com/questions/50565192
复制相似问题