Jak testować jednostkę DelegateCommand, która wywołuje metody asynchroniczne w MVVM

Jestem nowy w Unit Testing MVVM i korzystam z PRISM w moim projekcie. Wdrażam Testowanie jednostkowe w naszym bieżącym projekcie i nie mamy szczęścia w znalezieniu zasobów online, które powiedziałoby mi, jak bardzo DelegateCommand wywołuje metodę async. To jest pytanie uzupełniające do mojego posta -Jak wykonać test jednostkowy ViewModel metodą asynchroniczną. o tym, jak przetestować metody asynchroniczne w MVVM i odpowiedzieć, że metody publiczne można przetestować za pomocą async TestMethod. Ten scenariusz będzie działać tylko wtedy, gdy metoda, którą chcę przetestować, jest metodami publicznymi.

Problem polega na tym, że chcę przetestować mój DelegateCommand, ponieważ są to jedyne publiczne szczegóły, które chcę ujawnić w innych klasach, a wszystko inne jest prywatne. Mogę ujawnić moje prywatne metody jako publiczne, ale nigdy nie zrobię tego jako zły projekt. Nie jestem pewien, jak się do tego zabrać - czy DelegateCommand musi zostać przetestowany, czy też są jakieś inne rozwiązania? Interesuje mnie, jak inni to robią i jakoś prowadzą mnie na właściwą ścieżkę.

Oto moje kody ponownie

 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
                }
            }
        }

również tutaj jest polecenie w mojej maszynie wirtualnej, które wywołuje powyższą metodę asynchroniczną

  this.GetTasksCommand = new DelegateCommand(this.GetTasks);
      void GetTasks()
        {
                GetTasksAsync();
        }

a teraz moja metoda testowa wygląda tak

 [TestMethod]
        public void Command_Test_GetTasksCommand()
        {
          MyViewModel.GetTaskCommand.Execute(); // this should populate ViewModel.SimpleTask 
          Assert.IsTrue(MyBiewModel.SimpleTask != null)
        } 

Obecnie otrzymuję, że moja ViewModel.SimpleTask = null jest taka, ponieważ nie czeka na zakończenie metody asynchronicznej.

questionAnswers(3)

yourAnswerToTheQuestion