Mapper未在Asp.Net Core 2测试项目中初始化

问题描述 投票:-1回答:1

我为我的Asp.Net Core 2应用程序创建了一个测试项目。这是我的测试:

[Fact]
public void GetBlogs()
{
    var builder = new DbContextOptionsBuilder<Context>();
    builder.UseInMemoryDatabase();

    var options = builder.Options;

    using (var context = new Context(options))
    {
        //add new objects (removed for example)

        context.AddRange(blogs);
        context.SaveChanges();
    }

    using (var context = new Context(options))
    {
        var config = new AutoMapper.MapperConfiguration(cfg =>
        {
            cfg.AddProfile(new DomainToViewModelMappingProfile());
            cfg.AddProfile(new ViewModelToDomainMappingProfile());
        });

        var mapper = config.CreateMapper();
        var repository = new BlogRepository(context, mapper);

        var blogs = repository.GetBlogs();

        TODO: Add Asserts
    }
}

这是我的GetBlogs方法:

public IEnumerable<GetBlogsQuery> GetBlogs()
{
    //UpdateBlogsAsync();
    CheckInactiveBlogs();
    return _context.Blogs.Where(x => x.IsActive).ProjectTo<GetBlogsQuery>();
}

和Blog Repository类的构造函数:

public BlogRepository(Context context, IMapper mapper)
{
    _context = context;
    _mapper = mapper;
}

但然后测试尝试调用ProjectTo我收到一条错误消息:

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

你能告诉我我做错了什么吗?

谢谢

更新:这是我的Automapper配置类:

public class AutoMapperConfig
{
    public static MapperConfiguration RegisterMappings()
    {
        return new MapperConfiguration(cfg =>
        {
            cfg.AddProfile(new DomainToViewModelMappingProfile());
            cfg.AddProfile(new ViewModelToDomainMappingProfile());
        });
    }
}
c# unit-testing asp.net-core automapper xunit
1个回答
2
投票

如果你没有在MapperConfiguration扩展中提供ProjectTo的实例作为参数,那么你不需要使用Static API来初始化Automapper。

您需要初始化Automapper,如下所示:

    Mapper.Initialize(cfg =>
    {
        cfg.AddProfile(new DomainToViewModelMappingProfile());
        cfg.AddProfile(new ViewModelToDomainMappingProfile());
    });

ProjectTo的文档:https://github.com/AutoMapper/AutoMapper/wiki/Queryable-Extensions#parameterization

© www.soinside.com 2019 - 2024. All rights reserved.