Как написать макетную реализацию асинхронного универсального метода - PullRequest
0 голосов
/ 17 февраля 2019

Я пишу модульные тесты для своего класса обслуживания, но он вызывает внешнюю службу WCF, поэтому нужно смоделировать эти вызовы.Это интерфейс оболочки внешних вызовов службы WCF.

internal interface IKoopServiceRequestHelper
{
Task<ServiceResponseDTO> CreateRequestAsync(ServiceRequestDTO serviceRequestDTO);

Task<TResponse> SendServiceMessagesAsync<TRequest, TResponse>(TRequest request, string messageCode)
    where TRequest : RequestDTO
    where TResponse : IResponseDTO;
}

Чтобы высмеивать реальную реализацию этого интерфейса, я написал класс-заглушку, как показано ниже.

 class StubRequestHelper : IKoopServiceRequestHelper
{
    public async Task<ServiceResponseDTO> CreateRequestAsync(ServiceRequestDTO serviceRequestDTO)
    {
        return await Task.FromResult(new ServiceResponseDTO());
    }
}

Но я не могу написатьфиктивная реализация второго метода с именем SendServiceMessagesAsync, который имеет два параметра универсального типа.

1 Ответ

0 голосов
/ 17 февраля 2019

Попробуйте использовать moq.Допущения заключаются в том, чтобы выполнить все ограничения:

  • ServiceRequestDTO : RequestDTO
  • ServiceResponseDTO : IResponseDTO

Использование moq должно быть довольно простым

var mock = new Mock<IKoopServiceRequestHelper>();
mock.Setup(m => m.CreateRequestAsync(It.IsAny<ServiceRequestDTO>()))
    .Returns(Task.FromResult(new ServiceResponseDTO()));
mock.Setup(m => m.SendServiceMessagesAsync<ServiceRequestDTO, ServiceResponseDTO>(It.IsAny<ServiceRequestDTO>(), It.IsAny<string>()))
    .Returns(Task.FromResult(new ServiceResponseDTO()));
...