不能使用带有数组参数的构造函数使用Rhino Mocks来模拟类

时间:2010-05-18 07:35:04

标签: c# mocking rhino-mocks

我们无法在RhinoMocks中模拟此类。

public class Service
{
    public Service(Command[] commands){}
}
public abstract class Command {}

// Code
var mock = MockRepository.GenerateMock<Service>(new Command[]{}); // or
mock = MockRepository.GenerateMock<Service>(null)

Rhino模拟失败抱怨它无法找到具有匹配参数的构造函数。 我做错了什么?

谢谢,

2 个答案:

答案 0 :(得分:6)

试试这样:

var mock = MockRepository.GenerateMock<Service>(
    new object[] { new Command[0] }
);

答案 1 :(得分:0)

此外,您可以使用接口包装Service,而不必担心构造函数参数。如果构造函数发生了变化 - 您的测试将与这些实现细节相关联,需要更新。

var mock = MockRepository.GenerateMock<IService>();

编辑:至少隔离该模拟的创建,因此如果服务上的构造函数发生更改,则不必在每个位置进行更新。一种常见的做法如下:

(在你的测试课程中)

private ObjectWithServiceDependency CreateObjectUnderTest(){
     //Here you would inject your Service dependency with the above answer from Darin
     //i.e.
     var mockService= MockRepository.GenerateMock<Service>(new object[] {new Command[0] });
     var objectUnderTest = new ObjectWithServiceDependency(mockService);
     return objectUnderTest;
}

然后在测试中,

[Test]
public TestSomething(){
     var out = CreateObjectUnderTest();
     //do testing
     mockService.Expect(...);
}