我嘗試使用包含異步方法的NUnit測試類。我不知道如何以正確的方式做到這一點。通過異步方法設置的測試屬性
我有一個類看起來是這樣的:
public class EditorViewModel:INotifyPropertyChanged
{
public void SetIdentifier(string identifier)
{
CalcContentAsync();
}
private async void CalcContentAsync()
{
await SetContentAsync();
DoSomething();
}
private async Task SetContentAsync()
{
Content = await Task.Run<object>(() => CalculateContent());
RaisePropertyChanged("Content");
}
public object Content { get; private set; }
...
}
我怎麼能寫在NUnit的測試,即檢查該內容屬性設置爲正確的價值?我想要做這樣的事情:
[Test]
public void Content_WhenModifierIsXXX_ReturnsSomeViewModel()
{
var viewModel = new EditorViewModel();
viewModel.SetIdentifier("XXX");
Assert.That(viewModel.Content, Is.InstanceOf<ISomeContentViewModel>());
}
但這並不奏效。因爲異步代碼在斷言之前未被執行。 。
它只是一個錯字SetIdentifier上沒有異步? – Domysee
@Domysee我這麼認爲是因爲它無法用其他方式編譯。 –
[避免異步無效](http://haacked.com/archive/2014/11/11/async-void-methods/)。認真 - 不要這樣做。你不能測試它,任何調用代碼都不能等待完成。 –