我不确定从哪里开始,但让我简单介绍一下我的情况和我想要实现的目标。我对MVVM上的单元测试相当陌生,并且在测试使用PRISM委托命令属性公开的命令时遇到了困难。
我的委托命令调用异步方法,必须等待才能获取实际结果。以下是由我想要测试的方法调用的异步方法。
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
}
}
}
这里是在我虚拟机中调用上述异步方法的命令:
this.GetTasksCommand = new DelegateCommand(this.GetTasks);
void GetTasks()
{
GetTasksAsync();
}
现在,我的测试方法如下:
[TestMethod]
public void Command_Test_GetTasksCommand()
{
MyViewModel.GetTaskCommand.Execute(); // this should populate ViewModel.SimpleTask
Assert.IsTrue(MyBiewModel.SimpleTask != null)
}
目前我得到的是,我的ViewModel.SimpleTask = null,这是因为它没有等待异步方法完成。我知道在stackoverflow上有一些相关主题,但我找不到与我的DelegateCommands相关的内容。