2015-11-28 2 views
0

Например ISomething представляет собой интерфейс с тремя свойствами: string Name и int Count и некоторой комплексной собственности ImComplex (с круговым зависимостей и т.д.), что я не хочу AutoFixture строить. Поэтому мне нужно AutoFixture для создания макета ISomething с Name и Count, настроенных по его алгоритму по умолчанию, и ImComplex как null. Но если я пытаюсь решить, как это я получаю исключение:AutoFixture + AutoMoq: Создать макет с исключенной собственности

fixture.Customize(new AutoConfiguredMoqCustomization()); 
var some = fixture.Build<ISomething>().Without(x=>x.ImComplex).Create<ISomething>(); 

Ploeh.AutoFixture.ObjectCreationException: Украшенные ISpecimenBuilder не удалось создать образец на основе запроса: RP.Core.IInformationUnit. Это может произойти, если запрос представляет собой интерфейс или абстрактный класс ; если это так, зарегистрируйте ISpecimenBuilder, который может создавать образцы на основе запроса. Если это происходит в строго типизированном выражении Build, попробуйте поставить фабрику , используя один из методов IFactoryComposer.

Что мне делать?

ответ

3

Build отключает все настройки (как указано в документации метода), поэтому он не будет работать вместе с AutoConfiguredMoqCustomization.

Если проблема заключается в том, что свойство имеет циклическую зависимость, то вы можете:

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

    fixture.Behaviors.OfType<ThrowingRecursionBehavior>().ToList() 
        .ForEach(b => fixture.Behaviors.Remove(b)); 
    
    int recursionDepth = 2; 
    fixture.Behaviors.Add(new OmitOnRecursionBehavior(recursionDepth)); 
    
+0

Th Анк ты! Сущности Entity Framework имеют свойства навигации, которые вызывают круговые зависимости. Я пытался использовать OmitOnRecursionBehavior, но не имел успеха. – AsValeO

Смежные вопросы