在RhinoMocks或Moq中,可以在调用构造函数之前设置对象的属性吗?
我正在尝试测试方法。
包含该方法的类在其构造函数中有一些代码依赖于某些成员被设置,遗憾的是构造函数中没有用于设置它们的参数,因此我必须通过属性设置它们。有没有办法在RhinoMocks或Moq中调用构造函数之前设置此属性?
答案 0 :(得分:7)
那怎么办?在尚不存在的对象上设置属性? 我认为您应该认识到类的设计存在问题,并尝试对其进行更改以使其更易于测试,例如使用dependency injection。
答案 1 :(得分:1)
这听起来很奇怪:klausbyskov可能是正确的,因为这里有一些设计问题。
这些成员是否直接在代码中设置?例如
protected string myField = "this and that";
public MyClass()
{
if (myField == "this and that") { DoSomething(); }
}
如果是这种情况,则可以更改这些成员的唯一方法是子类覆盖它们,例如构造函数
public SubClass()
{
myField = "something else";
}
将确保SubClass()将字段初始化为“其他内容”。但是,这将在 MyClass()的构造函数之后运行。
我会仔细检查构造函数中是否需要任何逻辑。总的来说这是一个坏主意;如果您需要在对象中有条件地创建成员,请考虑改为Factory pattern。