C # Как Xunit Test - Task Void Метод - PullRequest
0 голосов
/ 15 января 2019

У меня есть функция, которая сохраняет в базу данных couch db, и это метод Task Void, он ничего не возвращает, и я хочу выполнить его модульное тестирование, но выдает ошибку, которую я не ожидаю ...

Я пытался утверждать, что возвращаемый тип является типом Задачи, но он не работает

public async Task CreateMessageHistoryAsync(Message message)
{
  //This is the method that I am testing
    if (!response.IsSuccessStatusCode)
        {
            throw new HttpRequestException(await response.Content.ReadAsStringAsync());
        }
    //This will throw if it does not save, can I test this?
}



[Fact]
public async Task Should_NotThrowHttpRequestException_When_AMessageHistoryIsCreated()
{
  var recipients = MockMessage.GetRecipients("Acc", "Site 1", "Site 2", "Site 3");
  var message = MockMessage.GetMessage(recipients);

  mockStateFixture
    .MockMessageHistoryService
    .Setup(service => service.CreateMessageHistoryAsync(message));                    

  var messageHistoryService = new MessageHistoryService(
                mockStateFixture.MockIHttpClientFactory.Object);

  await Assert.IsType<Task>(messageHistoryService.CreateMessageHistoryAsync(message));              
}

Я ожидаю, что задание вернется, но это фактические результаты:

Сообщение о результате:

Assert.IsType() Failure
Expected: System.Threading.Tasks.Task
Actual:   System.Threading.Tasks.Task`1[[System.Threading.Tasks.VoidTaskResult, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]]

1 Ответ

0 голосов
/ 30 января 2019

Task, возвращаемый вашим методом async, генерируется компилятором. Это может быть экземпляр Task или экземпляр производного типа. И это может измениться с будущими обновлениями. Вы не хотите проверять специально для типа Task; это связало бы ваш юнит-тест с деталями реализации.

Вы можете проверить «это Task или производный тип?», Который выглядит как await Assert.IsAssignableFrom<Task>(messageHistoryService.CreateMessageHistoryAsync(message));

Однако я не думаю, что это полезное утверждение вообще. Бесполезно утверждать, что метод, возвращающий T, фактически возвращает T (или производный тип), потому что конечно возвращает T! Итак, я бы рекомендовал полностью удалить это утверждение: await messageHistoryService.CreateMessageHistoryAsync(message);

...