2013-09-13 3 views
1

Я сегодня борюсь со следующей проблемой в течение дня или около того. Несмотря на то, что многие годы использовал AutoFixture, я не могу решить эту проблему.Впрыск недвижимости с автосферой

У меня есть абстрактный класс:

public abstract class AbstractClass 
{ 
    public IChildClass Child {get; set;} 
}; 

IChildInterface:

public interface IChildClass 
{ 
    string Name {get; set;} 
} 

Реализация интерфейса:

public class ChildClass : IChildClass 
{ 
    public string Name {get; set;} 
} 

я тогда производный класс AbstractClass:

public class MyClass : AbstractClass 
{ 
    public MyClass() 
    { 
     Initialize(); 
    } 

    private void Initialize() 
    { 
     var nameOfChild = Child.Name; 
    } 
} 

В моем единичном испытании на MyClass я следующее:

var fixture = new Fixture().Customize(new AutoMoqCustomization()); 

var sut = fixture.Create<MyClass>(); 

Но получить NullReferenceException на Child.Name. Я пробовал использовать Register and Customize для IChildClass и AbstractClass, не повезло. Даже обычная реализация ISpecimenBuilder в этом случае не помогает.

Есть ли у кого-нибудь хорошая идея о том, как обойти это?

+0

Если вы забыли о AutoFixture на какое-то время, как бы вы ожидали, что это сработает? –

+0

Я бы выделил свойство IChildClass объекта AbstractClass с атрибутом Unity [Dependency] и ввел его. –

+0

Вы пробовали просто переходить 'var sut = new MyClass();' и посмотреть, что происходит? –

ответ

0

Вышеупомянутый код никогда не будет работать, потому что Инициализировать вызывается в Ctor. Autofixture инициализирует объект, и свойство еще не было введено. Для вышеизложенного существует несколько работ, но в его нынешнем виде ... Ребенок всегда будет иметь значение null в методе Initialize.

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