Я пытаюсь протестировать класс с помощью NUnit, который содержит методы async. Я не знаю, как это сделать правильно.Тестирование свойства, установленного методом async
У меня есть класс с который выглядит следующим образом:
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, что проверяет, что Content-свойство устанавливается в нужное значение? Я хочу сделать что-то подобное:
[Test]
public void Content_WhenModifierIsXXX_ReturnsSomeViewModel()
{
var viewModel = new EditorViewModel();
viewModel.SetIdentifier("XXX");
Assert.That(viewModel.Content, Is.InstanceOf<ISomeContentViewModel>());
}
Но это не работает. Поскольку асинхронный код не был выполнен до утверждения. .
Это просто опечатать, что в SetIdentifier нет async? – Domysee
@ Domysee Я так думаю, потому что он не может скомпилировать другим способом. –
[Избегайте асинхронности] (http://haacked.com/archive/2014/11/11/async-void-methods/). Серьезно - не делайте этого. Вы не можете его протестировать, код вызова никогда не сможет дождаться завершения. –