2017-11-06 1 views
-2

저는 Asp.Net Core 2 app 용 테스트 프로젝트를 만들었습니다. 내 GetBlogs 방법이야 여기Mapper가 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 
    } 
} 

:

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를 호출 할 여기 내 테스트입니다 메시지 :

S ystem.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()); 
     }); 
    } 
} 
+1

*, 적절한 IConfigurationProvider 인스턴스를 전달해야합니다 * –

+0

왜 내가 여기에 투표를하지 않을지 모르십니까? 나는 너를 도우려고 노력하고있어. 설명해 주겠다고? –

+0

방금 ​​답변에 올린 코멘트를 삭제 한 것으로 나타 났습니까? "하지만 어떻게 BlogRepository 생성자에 객체를 전달할 수 있습니까?" 당신이 할 수있는 일을 당신에게 설명했습니다. 여기서 어떤 문제가 있습니까? –

답변

0

당신이 당신이 다음하지 않는 경우에 ProjectTo 확장에 매개 변수로 MapperConfiguration의 인스턴스를 제공하지 않는 경우 정적 API를 사용하여 초기화 자동화 도구를 사용하는 방법에 대해 설명합니다.

당신은 같은 Automapper를 초기화해야 다음

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

ProjectTo에 대한 문서 : 당신이 ProjectTo 또는 UseAsDataSource 확장 방법을 사용하는 경우 https://github.com/AutoMapper/AutoMapper/wiki/Queryable-Extensions#parameterization

+0

글쎄요, 당신이 BlogRepository에서 IMapper 인스턴스를 사용하고 있는지 잘 모르겠지만 대신에 IConfigurationProvider를 전달한 다음 그것을 사용하여'ProjectTo'에 전달할 수 있습니다 -'IConfigurationProvider config = new AutoMapper.MapperConfiguration (cfg => {cfg. AddProfile (새 DomainToViewModelMappingProfile()); cfg.AddProfile (새 ViewModelToDomainMappingProfile());}); –

관련 문제