Дразните Картопостроитель AutoMapper. Использование вызова карты Moq

Я думаю о них как о дисциплинированном способе использования множественного наследования, потому что в конечном счете mixin - это еще один класс python, который (может) будет следовать соглашениям о классах, которые называются mixins.

Мое понимание соглашения, которые управляют тем, что вы бы назвали Mixin, состоят в том, что Mixin:

  • добавляет методы, но не переменные экземпляра (константы класса в порядке)
  • наследует только от object ( в Python)

Таким образом, он ограничивает потенциальную сложность множественного наследования и позволяет легко отслеживать поток вашей программы, ограничивая, где вы должны смотреть (по сравнению с полным множественным наследованием ). Они похожи на рубиновые модули.

Если я хочу добавить переменные экземпляра (с большей гибкостью, чем допускается одиночным наследованием), то я склонен идти на композицию.

Сказав, что , Я видел классы, называемые XYZMixin, которые имеют переменные экземпляра.

24
задан Mark Seemann 26 February 2010 в 09:37
поделиться

4 ответа

Вы не должны дразнить AutoMapper, можно просто ввести реальный, как объяснено здесь :

var myProfile = new MyProfile();
var configuration = new MapperConfiguration(cfg => cfg.AddProfile(myProfile));
IMapper mapper = new Mapper(configuration);

можно ввести этот картопостроитель в модульных тестах. Смысл использования инструментов как AutoMapper для Вас не имеющий необходимость написать много отображающегося кода. При насмешке AutoMapper, Вы закончите тем, что имели необходимость сделать это.

1
ответ дан 28 November 2019 в 23:44
поделиться

Как лучше всего настроить фиктивное ожидание для функции Map в AutoMapper [?]

Вот один способ:

var mapperMock = new Mock<IMapper>();
mapperMock.Setup(m => m.Map<Foo, Bar>(It.IsAny<Foo>())).Returns(new Bar());
33
ответ дан 28 November 2019 в 23:44
поделиться

http://richarddingwall.name/2009/05/07 / mocking-out-automapper-with-dependency-injection /

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

2
ответ дан 28 November 2019 в 23:44
поделиться

Что вам нужно сделать, так это настроить AutoMapper следующим образом (StructureMap - это IoC). Затем вы можете сделать свои сервисы зависимыми от IMappingEngine. Оттуда издевательство должно быть очень простым.

public class AutoMapperConfigurationRegistry : Registry
    {
        public AutoMapperConfigurationRegistry()
        {
            ForRequestedType<Configuration>()
                .CacheBy(InstanceScope.Singleton)
                .TheDefault.Is.OfConcreteType<Configuration>()
                .CtorDependency<IEnumerable<IObjectMapper>>().Is(expr => expr.ConstructedBy(MapperRegistry.AllMappers));

            ForRequestedType<ITypeMapFactory>().TheDefaultIsConcreteType<TypeMapFactory>();

            ForRequestedType<IConfigurationProvider>()
                .TheDefault.Is.ConstructedBy(ctx => ctx.GetInstance<Configuration>());

            ForRequestedType<IConfiguration>()
                .TheDefault.Is.ConstructedBy(ctx => ctx.GetInstance<Configuration>());
        }
    }
2
ответ дан 28 November 2019 в 23:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: