AutoMapper: ProjectTo не работает при вызове в модульных тестах - PullRequest
0 голосов
/ 08 января 2019

У меня запущено простое приложение CQRS, и все работает, как и ожидалось, отображение работает и т. Д. Я думаю, причина, по которой он не работает, заключается в том, что созданный мной автоматический обработчик не применяется к ProjectTo, поскольку ProjectTo использует методы расширения Я даже попытался передать маппер из теста в обработчик запросов и изменить его на .ProjectTo<T>(mapper.Configuration)

Сбой со следующим

Сообщение: System.InvalidOperationException: Mapper не инициализирован. Вызовите Initialize с соответствующей конфигурацией. Если вы пытаетесь использовать экземпляры mapper через контейнер или иным образом, убедитесь, что у вас нет вызовов статических методов Mapper.Map, и если вы используете методы расширения ProjectTo или UseAsDataSource, убедитесь, что вы передаете соответствующий IConfigurationProvider. экземпляр.

public class GetAnnouncementsQueryHandler : IRequestHandler<GetAnnouncementsQuery, IEnumerable<AnnouncementModel>>
{
    private readonly EventsContext context;

    public GetAnnouncementsQueryHandler(EventsContext context)
    {
        this.context = context;
    }

    public async Task<IEnumerable<AnnouncementModel>> Handle(GetAnnouncementsQuery request,
        CancellationToken cancellationToken)
    {
        return await context.Announcements
            .Where(a => a.OwnerId == request.OwnerId && !a.IsDeleted)
            .ProjectTo<AnnouncementModel>()
            .ToListAsync(cancellationToken);
    }
}

Настройка для автомаппера осуществляется через Autofac для реального кода, а для тестирования я просто скопировал профиль и вызвал его в ctor тестового класса

    private void SetupMapper()
    {
        var config = new MapperConfiguration(opts =>
        {

            opts.CreateMap<Announcement, AnnouncementModel>();
        });
        mapper = config.CreateMapper(); // Use this mapper to instantiate your class
    }

К вашему сведению, для реального кода мне не нужно было указывать отображение, поскольку ProjectTo, похоже, оно не нужно. Единственный способ заставить его работать из теста - это перестать использовать ProjectTo и положиться на ручное отображение

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