我是嘲笑的新手。我需要模拟方法(它没有返回值)。我找不到任何如何模拟方法的例子。我需要模拟ITempDa.Import
方法。
var stub = MockRepository.GenerateStub<ITempDA>();
stub.Stub(x => x.Import(param1)). ???
public void MockedImport() {
// some processing here
}
ITempDa.Import
应该被嘲笑,而是一些内部方法&#34; MockedImport
&#34;应该叫。
答案 0 :(得分: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()));
答案 1 :(得分:0)
在这种情况下,您不需要Return()调用,因为该方法返回void。如果要拦截调用并对模拟操作执行某些逻辑,请使用WhenCalled。在这种情况下,它也只是忽略Stub中的参数并处理WhenCalled表达式中的所有内容。 e.g。
var stub = MockRepository.GenerateStub<ITempDA>();
stub.Stub(x => x.Import(null))
.IgnoreArguments()
.WhenCalled(invocation =>
{
var arg = invocation.Arguments[0] as ...;
// etc
});