Testen eines ViewModels mit einer asynchronen Methode.

Ich bin nicht sicher, wo ich anfangen soll, aber ich möchte Ihnen eine kurze Vorstellung davon geben, wo ich bin und was ich erreichen möchte. Ich bin ziemlich neu in Unit Testing auf MVVM und habe Schwierigkeiten beim Testen der Befehle, die ich mit PRISM-Delegate-Befehlseigenschaften verfügbar gemacht habe. Mein Delegatbefehl ruft eine asynchrone Methode auf, auf die gewartet werden muss, damit ich das tatsächliche Ergebnis erhalte. Unten sehen Sie eine asyc-Methode, die von der Methode aufgerufen wird, die ich testen wollte.

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

Auch hier ist der Befehl in meiner VM, der die obige asynchrone Methode aufruft

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

und jetzt geht meine Testmethode so

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

Derzeit wird angezeigt, dass mein ViewModel.SimpleTask = null ist, da es nicht auf den Abschluss der asynchronen Methode wartet. Ich verstehe, dass es einige verwandte Themen gibt, die sich bereits im Stapelüberlauf befinden, aber ich konnte nichts im Zusammenhang mit meinen DelegateCommands finden.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage