Como Unit Testar um ViewModel com o método assíncrono.
Não sei por onde começar, mas deixe-me dar uma breve ideia de onde estou e do que quero alcançar. Eu sou muito novo em Testes Unitários em MVVM e tendo dificuldade em testar os comandos que expus com propriedades de comando delegado PRISM. Meus comandos delegados chamam o método assíncrono que precisa ser aguardado para que eu possa obter o resultado real. Abaixo está um método asyc que é chamado pelo método que eu queria testar.
async void GetTasksAsync()
{
this.SimpleTasks.Clear();
Func<IList<ISimpleTask>> taskAction = () =>
{
var result = this.dataService.GetTasks();
if (token.IsCancellationRequested)
return null;
return result;
};
IsBusyTreeView = true;
Task<IList<ISimpleTask>> getTasksTask = Task<IList<ISimpleTask>>.Factory.StartNew(taskAction, token);
var l = await getTasksTask; // waits for getTasksTask
if (l != null)
{
foreach (ISimpleTask t in l)
{
this.SimpleTasks.Add(t); // adds to ViewModel.SimpleTask
}
}
}
também aqui está o comando na minha VM que chama o método assíncrono acima
this.GetTasksCommand = new DelegateCommand(this.GetTasks);
void GetTasks()
{
GetTasksAsync();
}
e agora meu método de teste é como
[TestMethod]
public void Command_Test_GetTasksCommand()
{
MyViewModel.GetTaskCommand.Execute(); // this should populate ViewModel.SimpleTask
Assert.IsTrue(MyBiewModel.SimpleTask != null)
}
Atualmente, o que estou recebendo é que meu ViewModel.SimpleTask = null é porque ele não espera que o método assíncrono seja concluído. Eu entendo que há alguns tópicos relacionados a isso já no estouro de pilha, mas não consegui encontrar algo relacionado aos meus DelegateCommands.