一個異步指揮自動化測試我有一個異步Command
類,如下所示:在MVVM
public AsyncDelegateCommand(Func<Task> execute, Func<bool> canExecute)
{
this.execute = execute;
this.canExecute = canExecute;
}
public virtual bool CanExecute(object parameter)
{
if(executing)
return false;
if(canExecute == null)
return true;
return canExecute();
}
public async void Execute(object parameter) // Notice "async void"
{
executing = true;
CommandManager.InvalidateRequerySuggested();
if(parameter != null && executeWithParameter != null)
await executeWithParameter(parameter);
else if(execute != null)
await execute();
executing = false;
CommandManager.InvalidateRequerySuggested();
}
,它被稱爲像這樣:
FindProductCommand = new AsyncDelegateCommand(TryToFindProduct,() => CanFindProduct() && connector.HasConnection);
private async Task TryToFindProduct()
{
//code
}
當我的單元測試,它工作得好,因爲我立即從任務返回。
但是,在編寫我的集成測試時,我遇到了麻煩。我無法等待Execute
,因爲它是void
,我無法將其更改爲Task
。我最終這樣做::/
findProductViewModel.FindProductCommand.Execute(null);
Thread.Sleep(2000);
var informationViewModel = findProductViewModel.ProductViewModel.ProductInformationViewModel;
Assert.AreEqual("AFG00", informationViewModel.ProductGroup);
這個測試有更好的解決方案嗎?也許是依賴於實際需要多長時間的東西,並且不估計需要等待多久。
非常有用。下次我無法等待執行時,我可能會考慮這一點。儘管如此,我已經表明等待可能成爲可能。謝謝。 –