どこから始めればいいのかわかりませんが、私がどこにいるのか、何を達成したいのかについて簡単に説明します。私はMVVMでの単体テストにまったく慣れておらず、PRISMデリゲートコマンドのプロパティを使用して公開したコマンドをテストするのに苦労しています。私のデリゲートコマンドは、実際の結果を取得できるように待機する必要があるasyncメソッドを呼び出します。以下は、私がテストしたかったメソッドによって呼び出されるasycメソッドです。
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メソッドを呼び出すVMのコマンドもここにあります
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です。これは、非同期メソッドが終了するのを待たないためです。すでにスタックオーバーフローに関連するトピックがいくつかあることは理解していますが、DelegateCommandsに関連するものが見つかりませんでした。