Модульный тестовый пример для Automapper ValueConverter, макет mapper, не возвращающий ожидаемую модель

#c# #automapper #automapper-9

#c# #automapper #automapper-9

Вопрос:

Я написал valueconverter и написал для него тестовый пример. Когда я передаю mocked mapper в контекст разрешения, он ведет себя не так, как указано в настройках. Вот мой код —

Конвертер —

 public class AirlineConverter : IValueConverter<string, Airline>
{
    public Airline Convert(string sourceMember, ResolutionContext context)
    {
        var airlines = context.Options.Items["automap_airlines"] as List<EngineContract.Airline>;

        var airline = airlines.Find(airLine => airLine.Code == sourceMember);

        return context.Mapper.Map<Airline>(airline);
    }
}
  

Тестовый пример —

         [Theory]
    [JsonFileData("airlines.json")]
    public void Translate_Engine_Airline_ViewModel_Airline(string airlines)
    {
        var airlinesList = JsonConvert.DeserializeObject<List<EngineContract.Airline>>(airlines);

        var mappingOperationMock = new Mock<IMappingOperationOptions<string, Airline>>(MockBehavior.Strict);
        mappingOperationMock.Setup(x => x.Items).Returns(new Dictionary<string, object>() { { "automap_airlines", airlinesList } });

        var airlineConverter = new AirlineConverter();

        var mockMapper = new Mock<IRuntimeMapper>();
        
       mockMapper.Setup(x => x.Map<Airline>(It.IsAny<EngineContract.Airline>())).Returns(
         new Airline() { Code = "AA" }
       ); //not getting this object in AirlineConverter in response of context.Mapper.Map<Airline>(airline);

        var resolutionContext = new ResolutionContext(mappingOperationMock.Object, mockMapper.Object);

        var convertedAirline = airlineConverter.Convert("AA", resolutionContext);

        Assert.Equal("AA", convertedAirline.Code);
    }
  

Я получаю null в ответ context.Mapper.Map (airline); в AirlineConverter.
Что здесь не так?

Комментарии:

1. Нет необходимости издеваться над mapper, просто используйте реальную вещь.

2. ResolutionContext ожидает IRuntimeMapper в конструкторе. Как мне это получить? Не могли бы вы, пожалуйста, помочь мне с этим?

3. Он больше не доступен в последней версии AutoMapper, как говорит @LucianBargaoanu, просто используйте IMapper.Map<type> .