【问题标题】:Using RhinoMocks, how do you mock or stub a concrete class without an empty constructor?使用 RhinoMocks,如何在没有空构造函数的情况下模拟或存根具体类?
【发布时间】:2009-08-17 23:50:34
【问题描述】:

当你的类上有一个空的构造函数时,用 Rhino Mocks 模拟一个具体的类似乎很容易:

public class MyClass{
     public MyClass() {}
}

但是如果我添加一个带参数的构造函数并删除不带参数的构造函数:

public class MyClass{
     public MyClass(MyOtherClass instance) {}
}

我倾向于得到一个例外:

System.MissingMethodException:不能 找到匹配的构造函数 论据

我尝试在对 Mock 或 Stub 的调用中放入空值,但它不起作用。

我可以创建缺少无参数构造函数的具体类的模拟和存根吗?

【问题讨论】:

    标签: c# constructor tdd rhino-mocks


    【解决方案1】:

    是的。只需在您的StrictMock() 调用中传入参数即可:

    // New FruitBasket that can hold 50 fruits.
    MockRepository mocks = new MockRepository();
    FruitBasket basket = mocks.StrictMock<FruitBasket>(50);
    

    【讨论】:

    • 和编译时安全性消失了
    【解决方案2】:

    如果你模拟一个没有空/默认构造函数的具体类,那么 Rhino Mocks 将不得不使用任何其他可用的构造函数。 Rhino 将需要您为任何非空构造函数提供参数,因为它不知道如何构建它们。

    我的错误是我试图将空值传递给CreateMockGenerateMock 调用,一旦我为构造函数生成了一个非空参数,创建模拟或存根的调用就开始工作了。

    【讨论】:

      【解决方案3】:

      您必须在您的DynamicMock&lt;T&gt; 语句之后将它们传入,该语句将参数数组作为参数。不幸的是,没有对其进行类型检查,但如果您将参数与签名匹配,它将调用适当的构造函数。

      例如:

      var myMock = MockRepository.DynamicMock<MyClassWithVirtuals>(int x, myObj y);
      

      【讨论】:

        猜你喜欢
        • 2010-09-12
        • 1970-01-01
        • 2014-03-29
        • 1970-01-01
        • 1970-01-01
        • 2020-01-29
        • 2020-10-14
        • 2011-11-03
        • 2011-11-24
        相关资源
        最近更新 更多