当我模拟方法链时,我必须以下面的格式编写它们
when(foo.getBar()).thenReturn(bar);
when(bar.getName()).thenReturn("Foo Bar");
还是我也可以使用以下格式?因为两个都在为我工作而且我在问这个问题,因为我被告知我的第二个(下面)方法是错误的
when(foo.getBar()).thenReturn(bar);
when(foo.getBar().getName()).thenReturn("Foo Bar");
答案 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}}事件中的验证。