【发布时间】:2020-03-05 08:00:55
【问题描述】:
我正在尝试测试一个返回泛型类型接口的方法,但我总是收到此错误:
System.ArgumentException : 无效回调。在具有 0 个参数的方法上设置不能调用具有不同数量参数 (1) 的回调。在 Moq.MethodCall.SetReturnsResponse g__ValidateCallback|27_0(委托回调)
测试方法:
//Arrange
Mock<IClientService> clientService = new Mock<IClientService>();
clientService
.Setup(x => x.GetRabbitClient<AlertRequest>())
.Returns<IMessageQueueClient<AlertRequest>>(x => new Mock<IMessageQueueClient<AlertRequest>>().Object);
//Act
var client = clientService.Object.GetRabbitClient<AlertRequest>();
//Assert
Assert.NotNull(client);
ClientService 类:
public class ClientService : IClientService
{
/// <inheritdoc />
public IMessageQueueClient<TMessage> GetRabbitClient<TMessage>() where TMessage : class, new()
{
ServiceCollection serviceCollection = new ServiceCollection();
IConfigurationRoot configuration = new ConfigurationBuilder()
.AddJsonFile("appsettings.json")
.Build();
serviceCollection.UseMessageQueueOptions<RabbitMQSettings>(configuration);
serviceCollection.UseMessageQueueFor<TMessage>();
var serviceProvider = serviceCollection.BuildServiceProvider();
return serviceProvider.GetRequiredService<IMessageQueueClient<TMessage>>();
}
}
【问题讨论】:
-
可能是Object有问题?您在 Returns 和 Act 中使用 .Object。尝试在 Returns 中删除 .Object
-
如果我删除 Returns 中的对象,我会得到这个:无法将类型 'Mock
>' 隐式转换为 'IMessageQueueClient '。存在显式转换(您是否缺少演员表?) -
然后移回 .Object in return in try this var client = clientService.GetRabbitClient
();
标签: c# .net unit-testing mocking moq