【发布时间】:2022-01-05 01:59:25
【问题描述】:
我在模拟返回 IHttpClient 的委托时遇到问题。这是客户的要求,我无法更改实现。
代码如下所示:
代表:
namespace Foo.Http
{
public delegate IHttpClient FooHttpClientProvider(string name);
}
测试类:
[SetUp]
public void SetUp()
{
Mock<FooHttpClientProvider>().Setup(x => x("HttpClient")).Returns(Mock<IHttpClient>().Object);
}
当我这样做时,我得到以下异常:
System.InvalidCastException : Unable to cast object of type 'Foo.Http.FooHttpClientProvider' to type 'Moq.IMocked`1[Foo.Http.FooHttpClientProvider]'.
有什么想法吗?这甚至可能吗?
编辑: 一些额外信息:我需要测试的服务被注入了 FooHttpClientProvider。我们使用带有 Autofac 的全局 Mock 来注册我们需要的服务。由于我无法将提供程序作为参数传递,因此我无法为 FooHttpClientProvider 实例化新的 Mock 并将其作为参数传递给我的服务;我需要在全局模拟中设置它。这使事情变得更加复杂。
服务的代码如下所示:
private readonly FooHttpClientProvider _client;
public FooService(
FooHttpClientProvider fooClient)
{
_client = fooClient("HttpClient");
}
public async Task<OutputDto> GetAsync(Request request)
{
var accessToken = await _AuthService.GetAccessTokenAsync();
try
{
var response =
await ExecuteGet<OutputDto>(
$"{FooConfig.BaseUrl}someEntpoint{GetQueryParams(request)}", accessToken);
return response;
}
catch(Exception ex)
{
//Exception handling
}
}
服务本身运行正常。只有在尝试模拟它进行单元测试时才会出现问题。
【问题讨论】:
标签: c# .net unit-testing asp.net-core mocking