使用RhinoMocks,如何在没有空构造函数的情况下模拟或存根具体类?

时间:2009-08-17 23:50:34

标签: c# constructor tdd rhino-mocks

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

public class MyClass{
     public MyClass() {}
}

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

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

我倾向于例外:

  

System.MissingMethodException:不能   找到一个匹配的构造函数   参数

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

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

3 个答案:

答案 0 :(得分:32)

是的。只需传递StrictMock()来电中的参数:

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

答案 1 :(得分:3)

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

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

答案 2 :(得分:1)

您必须在DynamicMock<T>语句之后传递它们,该语句将参数数组作为参数。不幸的是,没有对它进行类型检查,但是如果你将你的参数与签名匹配,它将调用相应的构造函数。

例如:

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