模拟 - 在调用构造函数之前设置属性

时间:2009-12-17 12:08:08

标签: javascript unit-testing mocking rhino-mocks moq

在RhinoMocks或Moq中,可以在调用构造函数之前设置对象的属性吗?

我正在尝试测试方法。

包含该方法的类在其构造函数中有一些代码依赖于某些成员被设置,遗憾的是构造函数中没有用于设置它们的参数,因此我必须通过属性设置它们。有没有办法在RhinoMocks或Moq中调用构造函数之前设置此属性?

2 个答案:

答案 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