首页 文章

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

提问于
浏览
228

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

我想在 生产环境 中使用 FooDao ,如下所示:

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

我可以写:

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

但是显而易见的问题是 getBar() 永远不会被我使用相同的 Bazoo 对象调用 . (诅咒 new 运营商!)

如果我能以一种无论参数如何返回 myFoo 的方式存根方法,我都会喜欢它 . 如果做不到这一点,我真的希望在合理的测试覆盖率之前避免更改 生产环境 代码 .

3 回答

  • 13
    when(
      fooDao.getBar(
        any(Bazoo.class)
      )
    ).thenReturn(myFoo);
    

    或(以避免 null s):

    when(
      fooDao.getBar(
        (Bazoo)notNull()
      )
    ).thenReturn(myFoo);
    

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

    对于Mockito 2.1.0和更新版本:

    import static org.mockito.ArgumentMatchers.*;
    

    对于旧版本:

    import static org.mockito.Matchers.*;
    
  • 9

    使用这样:

    when(
      fooDao.getBar(
        Matchers.<Bazoo>any()
      )
    ).thenReturn(myFoo);
    

    在您需要导入之前 Mockito.Matchers

  • 359

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

    anyObject应该符合您的需求 .

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

相关问题