IMapper макет, возвращающий ноль - PullRequest
0 голосов
/ 07 ноября 2018

У меня есть приложение в ядре .net, в котором я использую automapper в одном из моих сервисов. Теперь проблема в том, что я пишу тестовый метод и проверяющий автомапер, но он возвращает ноль. Вот метод обслуживания:

var users = _mapper.Map<IList<User>>(data);

а вот насмешка с использованием Moq:

var userLogsList = new List<User>() { new User() {Id = "1234", Name= "Dummy User"}};
var mapperMock = new Mock<IMapper>();
mapperMock.Setup(m => m.Map<List<UserEntity>, IList<User>>(It.IsAny<List<UserEntity>>()))
.Returns(userLogsList);

Теперь эта ложная повторяющаяся ноль каждый раз. Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 08 ноября 2018

Вы также можете рассмотреть возможность использования фактического IMapper экземпляра, настроенного специально для теста.

// Arrange

//Configure mapping just for this test
var config = new MapperConfiguration(cfg => {
    cfg.CreateMap<User, UserEntity>();
    cfg.CreateMap<UserEntity, User>();
});

var mapper = config.CreateMapper(); // IMapper to be injected into subject under test

//...

Если зависимость можно использовать без особого эффекта и минимальной конфигурации, то не всегда есть причина использовать макет.

В этом случае конфигурация намного проще, чем создание макета, и вы получаете полную функциональность зависимости без дополнительной работы.

0 голосов
/ 07 ноября 2018

Похоже, вы настроили Moq для перехвата вызовов с перегрузкой IMapper.Map<TSource, TDestination>(TSource source), но тестируемый код вызывает перегрузку IMapper.Map<TDestination>(object source).

Вы должны издеваться над последним:

var userLogsList = new List<User>() { new User() {Id = "1234", Name= "Dummy User"}};
var mapperMock = new Mock<IMapper>();
mapperMock.Setup(m => m.Map<IList<User>>(It.IsAny<object>()))
          .Returns(userLogsList);

Я предполагаю подписи для IMapper, как описано здесь .

...