代码之家  ›  专栏  ›  技术社区  ›  learnerplates

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

  •  0
  • learnerplates  · 技术社区  · 16 年前

    在Rhinomocks或MOQ中,是否可以在调用构造函数之前设置对象的属性?

    我正在测试一种方法。

    包含该方法的类在其构造函数中有一些代码,这取决于正在设置的某些成员,不幸的是,构造函数中没有要设置它们的参数,所以我必须通过属性设置它们。在Rhinomocks或MOQ中调用构造函数之前,是否有任何方法可以设置此属性?

    2 回复  |  直到 16 年前
        1
  •  7
  •   Klaus Byskov Pedersen    16 年前

    那怎么办?在尚未存在的对象上设置属性? 我认为您应该认识到您的类的设计有问题,并尝试更改它,使其变得更具可测试性,例如通过使用 dependency injection .

        2
  •  1
  •   Jeremy McGee    16 年前

    这听起来很奇怪:克劳斯比斯科夫可能是对的,因为这里有一些设计问题。

    这些成员是直接在代码中设置的吗?例如

    protected string myField = "this and that";
    
    public MyClass()
    {
        if (myField == "this and that") { DoSomething(); }
    }
    

    如果是这种情况,那么可以更改这些成员的唯一方法是子类重写它们,例如构造函数

    public SubClass()
    {
        myField = "something else";
    }
    

    将确保subclass()将字段初始化为“something else”。但是,这将运行 之后 myClass()的构造函数。

    我将仔细检查您的构造函数中是否需要任何逻辑。一般来说,这是一个坏主意;如果需要在对象中有条件地创建成员,请考虑 Factory pattern 相反。