【发布时间】:2013-09-13 08:06:35
【问题描述】:
我已经与以下问题斗争了一天左右。尽管使用 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;}
}
然后我有一个抽象类的派生类:
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 使用注册和自定义,但没有运气。在这种情况下,即使是 ISpecimenBuilder 的自定义实现也无济于事。
有没有人知道如何解决这个问题?
【问题讨论】:
-
如果您暂时忘记 AutoFixture,您希望它如何工作?
-
我的意思是:您是否真的尝试过来编译和运行这里提供的代码? AFAICT,它永远不可能工作。
-
这怎么可能?在构造函数执行之前不可能分配属性。 Unity 代码会是什么样子?
-
这有什么不同?
MyClass构造函数正在尝试读取Child属性,此时该属性尚未初始化...当然它会抛出NullReferenceException。 -
我不想在这里做个聪明人;我想帮忙,但除非我错过了什么,否则我看不出你怎么能指望这会奏效。我将您的所有代码复制到 VS 中,并尝试创建 MyClass 的实例,但正如预期的那样,它会引发异常。可能只是我在这里非常无聊,但我看不出它如何像这里介绍的那样工作。不管你使用
new、AutoFixture 还是 Unity...
标签: autofixture