Я думаю, что проблема в том, что Autofac.Extras.FakeItEasy не подделывает конкретные типы, вместо этого возвращается к поведению контейнера по умолчанию при создании фактического экземпляра запрошенного типа.Я не эксперт по Autofac, но вот мои рассуждения:
В документах , мы видим, что пакет
… позволяет автоматически создавать поддельные зависимости длякак конкретные, так и поддельные абстрактные экземпляры в модульных тестах с использованием контейнера Autofac
Формулировка немного двусмысленна, но я думаю, что это говорит о том, что будут предоставлены конкретные зависимости и абстрактные экземпляры будут поддельными.
Затем я взглянул на реализацию и нашел в FakeRegistrationHandler this:
if (typedService == null ||
(!typedService.ServiceType.GetTypeInfo().IsInterface && !typedService.ServiceType.GetTypeInfo().IsAbstract) ||
(typedService.ServiceType.GetTypeInfo().IsGenericType && typedService.ServiceType.GetGenericTypeDefinition() == typeof(IEnumerable<>)) ||
typedService.ServiceType.IsArray ||
typeof(IStartable).IsAssignableFrom(typedService.ServiceType))
Это проверка, чтобы увидеть, будет ли расширение подделывать запрошенный тип сервиса.Конкретный ProductQueryService
не является интерфейсом или абстрактным, поэтому я думаю, что контейнер ничего не сделает.
Я не вижу простого способа проинструктировать расширение подделывать все конкретные типы, но яуверен, что вы можете добавить одноразовую регистрацию для любого конкретного типа (или набора типов - возможно, всего в вашем пространстве имен), который вам нравится.
Я собирался предложить поднять проблему с Autofac, но я вижу вы сделали это .Хотелось бы, чтобы я сначала посмотрел туда.
Я также предупреждаю, что в целом подделка тестируемой системы не является моим первым выбором методов тестирования.Если возможно, я бы извлек зависимость, которая может быть введена в вашу SUT.Тогда подделайте это.Если он представлен как интерфейс или абстрактный класс, вы можете легко использовать Autofac.Extras.FakeItEasy для его предоставления.
А пока я собираюсь сделать некоторые заметки на Autofac.Extras.FakeItEasyвыпуск 14 .