首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用Xamarin.Forms测试命令(MVVM)

使用Xamarin.Forms测试命令(MVVM)
EN

Stack Overflow用户
提问于 2018-05-28 19:18:51
回答 2查看 418关注 0票数 0

因此,我在测试以下场景时遇到了问题:

代码语言:javascript
复制
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(),但是测试在调用之前就结束了。

我也尝试过:

代码语言:javascript
复制
public async Task TestMethod() =>  await Task.Run(() => Vm.LoginCommand.Execute(null));

但这也不管用。我相信我必须在我的操作上返回一些东西,但我不确定是什么。

EN

回答 2

Stack Overflow用户

发布于 2018-05-28 20:10:10

测试类似这样的东西:

代码语言:javascript
复制
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中的绑定具有以下形式:

代码语言:javascript
复制
Command = "{Binding LoginCommand}"
票数 1
EN

Stack Overflow用户

发布于 2018-05-29 02:00:46

不能将await关键字用于ICommand.Execute方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50565192

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档