Интеграционное тестирование EF Core + AutoMapper ProjectTo - PullRequest
0 голосов
/ 31 января 2019

Я пытаюсь провести интеграционное тестирование класса обслуживания, который использует AutoMapper и метод расширения ProjectTo.В самом приложении я внедряю IMapper через встроенную структуру DI ASP.Net Core.Все это, кажется, настроено правильно, так как само приложение работает.Например, мой класс обслуживания похож на этот

public class MyServiceClass
{
    private readonly IMapper _mapper;
    private readonly MyDbContext _context;
    public MyServiceClass(IMapper mapper, MyDbContext context)
    {
        _mapper = mapper;
        _context = context;
    }

    public MyModelDto GetMyModel()
    {
        var myModelDto = _context.MyModels.ProjectTo<MyModelDto>().FirstOrDefault();
        return myModelDto;
    }
}

Теперь я хочу провести интеграционное тестирование этого сервиса, т.е. создать его в тесте Xunit (без инфраструктуры ASP.Net DI, поскольку это проект модульного тестирования), и иметьон фактически запускает запрос к тестовой базе данных.Мой модульный тест выглядит примерно так

public class MyServiceClassTests
{
    [Fact]
    public void GetMyModelTest()
    {
        // Arrange
        var context = new MyDbContext();
        var config = new MapperConfiguration(cfg =>
        {
            cfg.AddProfile<MyModelProfile>();
        });
        var mapper = new Mapper(config);
        var sut = new MyServiceClass(mapper, context);

        // Act
        var results = sut.GetMyModel();

        // Assert
        Assert.NotNull(results);
    }
}

Я получаю следующее исключение:

Error Message:
 System.InvalidOperationException : Mapper not initialized.
 Call Initialize with appropriate configuration. 
If you are trying to use mapper instances through a container or otherwise,
 make sure you do not have any calls to the static Mapper.Map methods,
 and if you're using ProjectTo or UseAsDataSource extension methods,
 make sure you pass in the appropriate IConfigurationProvider instance.

Акцент на , если вы используете методы расширения ProjectTo или UseAsDataSource, убедитесь, что выпередать соответствующий экземпляр IConfigurationProvider.

Конечно, я не хочу изменять все мои использования ProjectTo <> для передачи IConfigurationProvider, я хочу продолжать использовать версию без параметров.Есть кое-что, что делает расширение services.AddAutoMapper (), которое не реплицируется, когда я создаю свой собственный экземпляр IMapper в моем модульном тесте.

Могу ли я что-нибудь сделать, чтобы это работало так, как я думаюэто должно работать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...