【问题标题】:Mocking - setting a property before calling the constructor模拟 - 在调用构造函数之前设置属性
【发布时间】:2009-12-17 12:08:08
【问题描述】:

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

我正在尝试测试一种方法。

包含该方法的类在其构造函数中有一些代码,这取决于设置的某些成员,不幸的是构造函数中没有参数来设置它们,所以我必须通过属性设置它们。有没有办法在 RhinoMocks 或 Moq 中调用构造函数之前设置这个属性?

【问题讨论】:

  • 一些示例代码可能有助于澄清这个问题。我不明白您的构造函数如何依赖属性。您是在谈论被测对象的构造函数,还是要模拟的类的构造函数?

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


【解决方案1】:

这将如何工作?在尚不存在的对象上设置属性? 我认为您应该认识到您的课程设计存在问题并尝试对其进行更改以使其更具可测试性,例如使用dependency injection

【讨论】:

    【解决方案2】:

    这听起来很奇怪:klausbyskov 可能是对的,因为这里存在一些设计问题。

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

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

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

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

    将确保 SubClass() 将字段初始化为“其他”。但是,这将在 MyClass() 的构造函数之后运行

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

    【讨论】:

      猜你喜欢
      • 2010-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-08
      • 2012-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多