RhinoMocks模拟方法没有返回

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

  var stub = MockRepository.GenerateStub(); stub.Stub(x => x.Import(param1)). ??? public void MockedImport() { // some processing here } 

ITempDa.Import应该被ITempDa.Import ,而应该调用一些内部方法“ MockedImport ”。

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

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

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

或者如果MockedImportImport相同的参数:

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

你应该使用WhenCalled方法,当被测试的方法调用你的假,你想拦截执行(执行一​​些东西+更改返回值/更改参数/做额外的步骤等等)。 使用Do而不是WhenCalled另一个原因是,您的代码变得更具可读性。

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

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

在这种情况下,您不需要Return()调用,因为该方法返回void。 如果要拦截调用并对模拟操作执行某些逻辑,请使用WhenCalled。 在这种情况下,它也只是忽略Stub中的参数并处理WhenCalled表达式中的所有内容。 例如

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