繁体   English   中英

如何编写异步泛型方法的模拟实现

[英]How to write mock implementation of async generic method

我正在为服务类编写单元测试,但是它调用了外部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的第二种方法的模拟实现,该方法具有两个泛型类型参数。

尝试使用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()));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM