Я просматриваю свои автомастеры с помощью одного большого класса AutoMapperConfiguration для использования фактических профилей. Global теперь выглядит так (простите открывающуюся/закрывающуюся нарушение сейчас)Профили автомоделирования и модульные тесты
Mapper.Initialize(x =>
{
x.AddProfile<ABCMappingProfile>();
x.AddProfile<XYZMappingProfile>();
// etc., etc.
});
Ключевой часть, которая получила меня над верхними и препятствием, которое было ранее всегда останавливал меня с использованием профилей были обязательным мой Ninject. Я никогда не смогу получить привязку к работе. До меня было такое связывание:
Bind<IMappingEngine>().ToConstant(Mapper.Engine).InSingletonScope();
Я с тех пор мигрировали в эту привязку:
Bind<IMappingEngine>().ToMethod(context => Mapper.Engine);
Это теперь работает, приложение является функциональным, у меня есть профили, и все хорошо.
Захват теперь в моих модульных тестах. Используя NUnit, я бы установил зависимости конструктора.
private readonly IMappingEngine _mappingEngine = Mapper.Engine;
, а затем в моей [Setup] метод, который я бы построить мой контроллер MVC и вызвать класс AutoMapperConfiguration.
[SetUp]
public void Setup()
{
_apiController = new ApiController(_mappingEngine);
AutoMapperConfiguration.Configure();
}
, который я сейчас модифицировал.
[SetUp]
public void Setup()
{
_apiController = new ApiController(_mappingEngine);
Mapper.Initialize(x =>
{
x.AddProfile<ABCMappingProfile>();
x.AddProfile<XYZMappingProfile>();
// etc., etc.
});
}
К сожалению, это не работает. Кажется, что сопоставления не отображаются, поскольку, когда я ударяю метод, который использует сопоставления, AutoMapper выдает исключение, указывающее, что отображение не существует. Любые предложения о том, как/что изменить определение/инъекцию картографа в тесте, чтобы решить эту проблему? Я предполагаю, что определение поля IMappingEngine - это моя проблема, но не знаю, какие у меня варианты.
Благодаря
К сожалению, я не получил обратно к вам еще. Я проверил тест, и ваш Git работает, но как только я попытаюсь вытащить двигатель как параметр конструктора, все сходит с рельсов. Я собираюсь вернуться сегодня вечером для дальнейшего тестирования. – Khepri
Я сегодня утром подтвердил, что как самостоятельное решение, ваш git делает то, что вы ожидаете. Однако для моего сценария, когда я пытаюсь передать экземпляр IMappingEngine в качестве параметра конструктора с использованием Ninject, я все еще не получаю инициализированные сопоставления. Я взял git и добавил метод, чтобы вернуть инициализированный MappingEngine и попытался передать это как параметр конструктора. Результаты были одинаковыми. – Khepri
Вы пытались заменить _all_ calls/refences на «Mapper» («Mapper.Initialize',« Mapper.Engine' и т. Д.) С новым автономным экземпляром «MappingEngine»? – Akim