【发布时间】:2017-11-06 19:38:52
【问题描述】:
我为我的 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.Map 方法的任何调用,如果你是 使用 ProjectTo 或 UseAsDataSource 扩展方法,确保你 传入适当的 IConfigurationProvider 实例。'
你能告诉我我做错了什么吗?
谢谢
更新: 这是我的 Automapper 配置类:
public class AutoMapperConfig
{
public static MapperConfiguration RegisterMappings()
{
return new MapperConfiguration(cfg =>
{
cfg.AddProfile(new DomainToViewModelMappingProfile());
cfg.AddProfile(new ViewModelToDomainMappingProfile());
});
}
}
【问题讨论】:
-
如果您使用 ProjectTo 或 UseAsDataSource 扩展方法,请确保传入适当的 IConfigurationProvider 实例
-
不知道你为什么要在这里给我投反对票?我正在努力帮助你。需要解释一下吗?
-
刚刚注意到您删除了对答案的评论? “但是我怎样才能将对象传递给 BlogRepository 构造函数呢?”并向您解释了您可以做什么......这里有什么问题?
标签: c# unit-testing asp.net-core automapper xunit