我们无法在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模拟失败抱怨它无法找到具有匹配参数的构造函数。 我做错了什么?
谢谢,
答案 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(...);
}