当你在一个类上有一个空的构造函数时,使用Rhino Mocks模拟一个具体的类似乎很容易:
public class MyClass{
public MyClass() {}
}
但是如果我添加一个带参数的构造函数并删除不带参数的构造函数:
public class MyClass{
public MyClass(MyOtherClass instance) {}
}
我倾向于例外:
System.MissingMethodException:不能 找到一个匹配的构造函数 参数
我已经尝试在我对Mock或Stub的调用中输入空值,但它不起作用。
我可以创建缺少无参数构造函数的具体类的模拟和存根吗?
答案 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将需要您为任何非空构造函数提供参数,因为它不会有任何线索如何构建它们。
我的错误是我尝试将空值传递给CreateMock
或GenerateMock
调用,只要我为构造函数生成一个非null参数,调用创建模拟或存根开始工作了。
答案 2 :(得分:1)
您必须在DynamicMock<T>
语句之后传递它们,该语句将参数数组作为参数。不幸的是,没有对它进行类型检查,但是如果你将你的参数与签名匹配,它将调用相应的构造函数。
例如:
var myMock = MockRepository.DynamicMock<MyClassWithVirtuals>(int x, myObj y);