Модульный тест тип Moq generi c - PullRequest
0 голосов
/ 05 марта 2020

Я пытаюсь протестировать метод, который возвращает интерфейс с обобщенным типом c, но я всегда получаю эту ошибку:

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>>();
    }
}

1 Ответ

1 голос
/ 05 марта 2020

ClientService является тестируемым классом, поэтому вам не нужно его макетировать. Я бы сделал что-то вроде этого:

//Arrange
var clientService = new ClientService();

//Act
var client = clientService.GetRabbitClient<AlertRequest>();

//Assert
Assert.NotNull(client);
...