繁体   English   中英

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

[英]Testing Command with Xamarin.Forms (MVVM)

因此,我在测试以下情况时遇到了麻烦:

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));

但这也不起作用。 我相信我必须在Action上返回一些内容,但是我不确定是什么。

测试类似的东西:

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}"

您不能对ICommand.Execute方法使用await关键字。 如果要测试登录操作,请首先将LoginCommandAction的方法访问修饰符更改为public,然后从TestMethod调用LoginCommandAction方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM