1

我一直在与以下问题作斗争一天左右。尽管多年来一直使用 AutoFixture,但我无法解决这个问题。

我有一个抽象类:

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

IChild 接口:

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

接口的实现:

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

然后我有一个抽象类的派生类:

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>();

但是在 Child.Name 上获得 NullReferenceException。我已经尝试对 IChildClass 和 AbstractClass 使用 Register 和 Customize,但没有成功。即使是 ISpecimenBuilder 的自定义实现,在这种情况下也无济于事。

有没有人知道如何解决这个问题?

4

1 回答 1

1

上面的代码永远不会工作,因为Initialize在 Tor 中被调用。Autofixture 正在初始化对象,并且该属性还没有被注入。上面有几种解决方法,但就目前而言...... Child在 Initialize 方法中将始终为空。

于 2016-01-07T09:03:23.803 回答