Como teste de unidade DelegateCommand que chama métodos assíncronos no MVVM

Eu sou novo no MVVM de Testes Unitários e usando o PRISM no meu projeto. Estou implementando o Unit Testing em nosso projeto atual e não tendo sorte em encontrar recursos on-line que me diriam como o DelegateCommand totest chama o método assíncrono. Esta é uma pergunta de acompanhamento para o meu post -Como Unit Testar um ViewModel com o método assíncrono. sobre como testar um método assíncrono no MVVM e foi respondido que os métodos públicos podem ser testados usando o método assíncrono TestMethod. Esse cenário funcionará somente se o método que eu quero testar for métodos públicos.

O problema é que eu quero testar o meu DelegateCommand como este são os únicos detalhes públicos que eu quero expor em outras classes e tudo o mais é privado. Eu posso expor meus métodos privados como públicos, mas nunca farei isso como um design ruim. Não tenho certeza sobre como fazer isso - O DelegateCommand precisa ser testado ou há algum outro trabalho em torno disso? Estou interessado em saber como os outros fazem isso e de alguma forma me levam ao caminho certo.

Aqui estão os meus códigos novamente

 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.

questionAnswers(3)

yourAnswerToTheQuestion