Я новичок в тестировании модулей MVVM и использовании PRISM в моем проекте. Я выполняю модульное тестирование в нашем текущем проекте и не испытываю недостатка в поиске ресурсов в Интернете, которые расскажут мне, как totentCommand вызывает метод async. Это следующий вопрос к моему сообщению - Как Unit Test ViewModel с методом async. о том, как Unit Test использовать асинхронные методы в MVVM и был дан ответ, что общедоступные методы могут быть протестированы с использованием асинхронного TestMethod. Этот сценарий будет работать только в том случае, если метод, который я хочу проверить, - это общедоступные методы.
Проблема заключается в том, что я хочу протестировать свой DelegateCommand, поскольку это единственные публичные данные, которые я хочу показывать на других классах, а все остальное - частным. Я могу публиковать свои личные методы как публичные, но я никогда не сделаю этого как плохой дизайн. Я не уверен, как это сделать - нужно ли проверять DelegateCommand или работать над этим? Мне интересно узнать, как это происходит и как-то привести меня к правильному пути.
Вот мои коды снова
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
}
}
}
также есть команда в моей виртуальной машине, которая вызывает метод async выше
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 это потому, что он не ждет завершения асинхронного метода.