AutoMapper:在单元测试中调用时,ProjectTo不起作用

时间:2019-01-08 17:56:52

标签: automapper

我有一个简单的CQRS应用程序正在运行,并且一切都按预期工作,映射工作正常。我猜想它无法正常工作的原因是因为自{{1}起,我正在创建的自动映射器未应用于ProjectTo }正在使用扩展方法 我什至尝试将映射器从测试传递到查询处理程序,并将其更改为ProjectTo

失败,并显示以下内容

  

消息:System.InvalidOperationException:映射器未初始化。用适当的配置调用初始化。如果您尝试通过容器或其他方式使用mapper实例,请确保没有对静态Mapper.Map方法的任何调用,并且如果您使用的是ProjectTo或UseAsDataSource扩展方法,请确保传递适当的IConfigurationProvider实例。

.ProjectTo<T>(mapper.Configuration)

针对Automapper的设置是通过Autofac完成的,用于真实代码,对于测试,我只是复制了配置文件,并在测试类的ctor中调用了它

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

仅供参考,对于真实的代码,我不需要指定映射,因为 private void SetupMapper() { var config = new MapperConfiguration(opts => { opts.CreateMap<Announcement, AnnouncementModel>(); }); mapper = config.CreateMapper(); // Use this mapper to instantiate your class } 似乎不需要它。我可以使其从测试中正常工作的唯一方法是我是否停止使用ProjectTo并依靠手动映射

0 个答案:

没有答案