非同期メソッドを含む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/)。真剣に - これをしないでください。それをテストすることはできません。呼び出しコードは完了するまで待つことはできません。 –