Как вернуться из метода System.Threading.Tasks.‹string› в UnitTesting

У меня есть метод со следующей сигнатурой.

Task<string> Post(PartyVM model);

Я пишу класс модульного тестирования, используя следующий метод для проверки вышеуказанного метода Post.

        mockPartyManager.Setup(mr => mr.Post(It.IsAny<PartyVM>())).Returns(
           (PartyVM target) =>
           {
               if (target.PartyID.Equals(default(int)))
               {
                   target.Name = "NewP";
                   target.Status = "ACTIVE";
                   target.PartyRoleID = msoList.Count() + 1;
                   partyList.Add(target);
               }
               else
               {
                   var original = partyList.Where(q => q.PartyID == target.PartyID).Single();

                   if (original == null)
                   {
                       return "Execution failed";
                   }

                   original.Name = target.Name;
                   original.Status = target.Status;
               }

               return "Execution Successful";
           });
        this.MockMSOManager = mockPartyManager.Object;
    }

Я получаю сообщения об ошибках, когда пытаюсь вернуть строки.

Ошибка 45. Не удается неявно преобразовать тип «строка» в «System.Threading.Tasks.Task».

Как я могу решить эту проблему.

Ошибка


person Harsha W    schedule 04.09.2017    source источник
comment
Возможный дубликат Использование Moq для имитации асинхронного метода для модульного теста   -  person dymanoid    schedule 04.09.2017


Ответы (2)


Попробуйте использовать метод Task.FromResult<TResult>. Из MSDN:

Создает задачу, успешно завершенную с указанным результатом.

return Task.FromResult("Execution failed");
person Kapol    schedule 04.09.2017

Ваш метод возвращает задачу, а не строку. Используйте Task.FromResult, чтобы исправить ошибку.

https://msdn.microsoft.com/es-es/library/hh194922(v=vs.110).aspx

person Oscar    schedule 04.09.2017