Ответ 1
Если вы хотите сопоставить интерфейс с конкретным конкретным классом, вы можете это сделать:
fixture.Register<IFoo>(() => fixture.CreateAnonymous<ConcreteFoo>());
(Или fixture.Register<IFoo>( fixture.CreateAnonymous<ConcreteFoo>)
для краткости)
Однако AutoMoq (а также AutoRhinoMocks и AutoFakeItEasy) также является опцией. При этом попытка создания экземпляра IFoo вернет созданный Moq прокси, который реализует IFoo.
Однако с помощью Moq вы не увидите, как заполняются Bar1 и Bar2. Это связано не только с тем, что AutoFixture не вызывает сеттеры, а потому, что Moq (по умолчанию) не реализует геттеры.
Чтобы выполнить эту работу для Moq, нужно вызвать SetupAllProperties() для самого Mock<T>
. Возможно, это немного сложно сделать в текущем графике AutoMoq. Для этого уже есть рабочий элемент, но если вы прочитаете обсуждение, вы увидите, что проблема сложнее, чем казалось бы.
В любом случае, интерфейсы со свойствами являются плохой идеей по ряду других причин, поэтому лучшим решением является перепроектирование интерфейса, чтобы он не обладал свойствами.