Я боролся со следующей проблемой в течение дня или около того. Несмотря на то, что я использовал AutoFixture в течение многих лет, я не могу решить эту проблему.
У меня есть абстрактный класс:
public abstract class AbstractClass
{
public IChildClass Child {get; set;}
};
ICChildInterface:
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 и Customize для IChildClass и AbstractClass, но не повезло. Даже специальная реализация ISpecimenBuilder в этом случае не поможет.
У кого-нибудь есть хорошая идея, как обойти это?
var sut = new MyClass();
и посмотреть, что произойдет? - person Mark Seemann   schedule 13.09.2013var sut = fixture.Build<MyClass>().Without(x => x.Initialize).Create();
- person Mads Tjørnelund Toustrup   schedule 16.09.2013MyClass
пытается прочитать свойствоChild
, которое в этот момент не инициализировано... Конечно, он выдаетNullReferenceException
. - person Mark Seemann   schedule 16.09.2013new
, AutoFixture или Unity... - person Mark Seemann   schedule 18.09.2013