Команда тестирования с Xamarin.Forms (MVVM) - PullRequest
0 голосов
/ 28 мая 2018

Итак, у меня возникли проблемы при тестировании следующего сценария:

ICommand LoginCommand;

public LoginViewModel()
{
    LoginCommand = new Command(async () => await LoginCommandAction());
}

private async Task LoginCommandAction()
{
    var response = await _tokenService.GetToken(_user, _password, token);
}

Это моя ViewModel.Теперь, в моем тесте ViewModel, я хочу иметь возможность вызвать execute в моей LoginCommand и дождаться завершения, чтобы я мог утверждать его результаты.

Я только что попробовалвызывая execute(), но тест завершается до вызова.

Я также пытался:

public async Task TestMethod() =>  await Task.Run(() => Vm.LoginCommand.Execute(null));

Но это тоже не сработало.Я верю, что мне нужно что-то вернуть на моем действии , но я не уверен, что именно.

Ответы [ 2 ]

0 голосов
/ 28 мая 2018

Нельзя использовать ключевое слово await для метода ICommand.Execute.Если вы хотите проверить свою операцию входа в систему, сначала измените модификатор доступа к методу LoginCommandAction как public и вызовите метод LoginCommandAction из вашего TestMethod.

0 голосов
/ 28 мая 2018

Проверьте что-то вроде этого:

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}"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...