关于java:Mockito可以在不考虑参数的情况下存根方法吗?

Can Mockito stub a method without regard to the argument?

我正在尝试使用Mockito测试一些遗留代码。

我想在生产中使用如下的FooDao

1
foo = fooDao.getBar(new Bazoo());

我可以写:

1
when(fooDao.getBar(new Bazoo())).thenReturn(myFoo);

但显而易见的问题是,getBar()永远不会被我为该方法存根的相同Bazoo对象调用。 (诅咒new运算符!)

如果我能以一种不管参数的方式返回myFoo的方式存根方法,我都会喜欢它。 如果做不到这一点,我会听取其他的解决方法建议,但我真的希望避免更改生产代码,直到有合理的测试覆盖率。


1
2
3
4
5
when(
  fooDao.getBar(
    any(Bazoo.class)
  )
).thenReturn(myFoo);

或(避免null s):

1
2
3
4
5
when(
  fooDao.getBar(
    (Bazoo)notNull()
  )
).thenReturn(myFoo);

不要忘记导入匹配器(许多其他可用):

对于Mockito 2.1.0和更新版本:

1
import static org.mockito.ArgumentMatchers.*;

对于旧版本:

1
import static org.mockito.Matchers.*;


使用这样:

1
2
3
4
5
when(
  fooDao.getBar(
    Matchers.<Bazoo>any()
  )
).thenReturn(myFoo);

在您需要导入Mockito.Matchers之前


http://site.mockito.org/mockito/docs/1.10.19/org/mockito/Matchers.html

anyObject应该符合您的需求。

此外,您始终可以考虑为Bazoo类实现hashCode和equals。 这将使您的代码示例按您希望的方式工作。