Ожидайте вызова метода async void для модульного тестирования.C#

Место общения программистов C#
Ответить
Anonymous
 Ожидайте вызова метода async void для модульного тестирования.

Сообщение Anonymous »

У меня есть метод, который выглядит следующим образом:

Код: Выделить всё

private async void DoStuff(long idToLookUp)
{
IOrder order = await orderService.LookUpIdAsync(idToLookUp);

// Close the search
IsSearchShowing = false;
}

//Other stuff in case you want to see it
public DelegateCommand DoLookupCommand{ get; set; }
ViewModel()
{
DoLookupCommand= new DelegateCommand(DoStuff);
}
Я пытаюсь провести модульное тестирование следующим образом:

Код: Выделить всё

[TestMethod]
public void TestDoStuff()
{
//+ Arrange
myViewModel.IsSearchShowing = true;

// container is my Unity container and it setup in the init method.
container.Resolve().Returns(orderService);
orderService = Substitute.For();
orderService.LookUpIdAsync(Arg.Any())
.Returns(new Task(() => null));

//+ Act
myViewModel.DoLookupCommand.Execute(0);

//+ Assert
myViewModel.IsSearchShowing.Should().BeFalse();
}
Мое утверждение вызывается до того, как я закончу с макетом LookUpIdAsync. В моем обычном коде это именно то, что мне нужно. Но для моего модульного теста мне это не нужно.

Я перехожу на Async/Await с помощью BackgroundWorker. С фоновым работником это работало правильно, потому что я мог дождаться завершения работы BackgroundWorker.

Но, похоже, нет способа дождаться асинхронного метода void. .

Как я могу протестировать этот метод?

Подробнее здесь: https://stackoverflow.com/questions/142 ... it-testing
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»