2015-06-15 56 views
0

我是新来的嘲笑。我需要模拟方法(它没有返回值)。我找不到如何模拟方法的例子。我需要模拟ITempDa.Import方法。RhinoMocks模拟方法无返回

var stub = MockRepository.GenerateStub<ITempDA>(); 
stub.Stub(x => x.Import(param1)). ??? 


public void MockedImport() { 
    // some processing here 
} 

ITempDa.Import应该被嘲笑,而是一些内部方法“MockedImport”应该叫。

回答

1

正如@JamesLucas说你不需要使用Return()方法(你应该使用这种方法,只有当你的方法是不是void)。

在这种情况下,你应该使用Do()方法:

var stub = MockRepository.GenerateStub<ITempDA>(); 
stub.Stub(x => x.Import(Arg<object>.Is.Anything)) 
       .Do(new Action<object>(o => MockedImport())); 

,或者如果MockedImport部份相同的参数Import

stub.Stub(x => x.Import(Arg<object>.Is.Anything)) 
       .Do(new Action<object>(MockedImport); 

您应该使用WhenCalled方法时,被测方法叫你的假你想拦截执行(执行某些操作+更改返回值/更改参数/执行其他步骤等)。使用Do而不是WhenCalled的另一个原因是,您的代码变得更具可读性。

通常我不建议使用IgnoreArguments方法。原因很简单,你测试方法的行为。当某些事情违反方法行为时,测试应该失败。 IgnoreArguments容易隐藏的东西。但是,如果呼叫参数不重要,请执行以下操作:

stub.Stub(x => x.Import(null)) 
       .IgnoreArguments() 
       .Do(new Action<object>(o => MockedImport())); 
0

在这种情况下,您不需要Return()调用,因为方法无效返回。如果您想拦截呼叫并对模拟操作执行一些逻辑,请使用WhenCalled。在这种情况下,它也会忽略存根中的参数并处理WhenCalled表达式中的所有内容。例如

var stub = MockRepository.GenerateStub<ITempDA>(); 
stub.Stub(x => x.Import(null)) 
    .IgnoreArguments() 
    .WhenCalled(invocation => 
    { 
     var arg = invocation.Arguments[0] as ...; 
     // etc 
    });