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

时间:2017-11-06 19:38:53

标签: c# unit-testing asp.net-core automapper xunit

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

和BlogRepository类的构造函数:

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

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

  

System.InvalidOperationException:'Mapper未初始化。呼叫   使用适当的配置初始化。如果你想使用   通过容器或其他方式映射实例,确保你这样做   没有任何对静态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());
        });
    }
}

1 个答案:

答案 0 :(得分:2)

如果您没有在MapperConfiguration扩展名上提供ProjectTo的参数作为参数,那么您不必使用静态API初始化自动映射器。

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

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

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