c# – 用于测试调用异步方法的ICommand的模式
作者:互联网
我只关注单元测试(NUnit)ICommand的最佳实践,特别是MVVMCross中的MvxCommand实施
查看模型
public ICommand GetAuthorisationCommand
{
get { return new MvxCommand(
async () => await GetAuthorisationToken(),
() => !string.IsNullOrWhiteSpace(UserName) && !string.IsNullOrWhiteSpace(Password)); }
}
private async Task GetAuthorisationToken()
{
// ...Do something async
}
单元测试
[Test]
public async Task DoLogonCommandTest()
{
//Arrange
ViewModel vm = new ViewModel(clubCache, authorisationCache, authorisationService);
//Act
await Task.Run(() => vm.GetAuthorisationToken.Execute(null));
//Assert
Assert.Greater(MockDispatcher.Requests.Count, 0);
}
现在我遇到的问题是测试在没有等待异步操作的情况下逐渐消失,从ICommand调用异步方法感觉有些麻烦.
在单元测试这些ICommands和异步方法时是否有最佳实践?
解决方法:
您可以使用MvxAsyncCommand(请参阅:implementation)而不是MvxCommand,并将已发布的GetAuthorisationCommand类型从ICommand更改为IMvxAsyncCommand(但该接口不能通过nuget获得)然后您可以调用
await vm.GetAuthorisationToken.ExecuteAsync();
标签:c,unit-testing,async-await,mvvmcross,icommand 来源: https://codeday.me/bug/20190717/1488125.html