Mockito链功能使用

时间:2015-11-03 14:35:08

标签: unit-testing mocking mockito powermockito

当我模拟方法链时,我必须以下面的格式编写它们

when(foo.getBar()).thenReturn(bar);
when(bar.getName()).thenReturn("Foo Bar");

还是我也可以使用以下格式?因为两个都在为我工作而且我在问这个问题,因为我被告知我的第二个(下面)方法是错误的

when(foo.getBar()).thenReturn(bar);
when(foo.getBar().getName()).thenReturn("Foo Bar");

1 个答案:

答案 0 :(得分:0)

Mockito常见问题addresses this explicitly

  

我可以存根链接的吸气剂吗?

when(mock.getA().getB()).thenReturn(...);
     

这种存根,例如模拟返回模拟,返回模拟,等应该非常零星地使用,理想情况下永远不会。它明确指出违反了Law of Demeter。你不想搞砸Demeter。自从您收到警告后,请查看Mockito deep stubs

从技术角度来看,它得到了支持,部分原因是它与此无法区分:

when(foo.getBar()).thenReturn(bar);
foo.getBar();
when(bar.getName()).thenReturn("Foo Bar");

...这可能会干扰您需要verify(foo, times(n)).getBar()的{​​{3}}事件中的验证。