我们如何替换存根void方法的方法体? 事情是这样的:在mockito中添加虚空方法带有副作用
interface Foo {
void foo(Integer j);
}
(...)
Foo mockFoo = mock(Foo.class);
Answer<Void> ans = invocation -> {
Object[] args = invocation.getArguments();
System.out.println("called with arguments: " + Arrays.toString(args));
return null;
};
when(mockFoo.foo(any())).thenAnswer(ans);
(...)
mockFoo.foo(5) // Should print out "called with arguments: [5]"
它能够对参数进行访问,并能够执行使用这些参数的一些代码是很重要的。
我们试图doAnswer(ans).when(mockFoo).foo(any());
,但似乎建立模拟何时执行ANS拉姆达几次的身体,并为.when(mockFoo)
和.foo(any())
调用之间一些奇怪的原因,重置我们mockFoo变量设置为“零”。
那么有效:
Foo mockFoo = mock(Foo.class)
// mockFoo is an instance of a Foo$MockitoMock
Foo o = doAnswer(ans).when(mockFoo);
// mockFoo just became null at this point..?!
o.foo(any());
附:我们使用VertxUnitRunner来运行测试,但问题仍然存在于MockitoJUnitRunner中。
感谢, 阿科什Vandra
请参阅http://stackoverflow.com/questions/2276271/how-to-make-mock-to-void-methods-with-mockito – pringi
你有什么是正确的,并且肯定没有理由说'mockFoo'应该永远重置。您可以向我们展示实际的测试机构设置,而不是您发布的代码段?我有一种感觉,你的问题在那里,而不是你发布的代码。 –
@JeffBowman你是对的。在我的实际测试中,我提供了任何()作为int的参数,这似乎是原因。用anyInt()替换它解决了这个问题。 –