使用 mockito 测试私有方法

新手上路,请多包涵
public class A {

    public void method(boolean b){
          if (b == true)
               method1();
          else
               method2();
    }

    private void method1() {}
    private void method2() {}
}

public class TestA {

    @Test
    public void testMethod() {
      A a = mock(A.class);
      a.method(true);
      //how to test like    verify(a).method1();
    }
}

如何测试私有方法是否被调用,以及如何使用mockito测试私有方法?

原文由 Nageswaran 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 3.7k
2 个回答

你不能用 Mockito 做到这一点,但你可以使用 Powermock 来扩展 Mockito 和模拟私有方法。 Powermock 支持 Mockito。 是一个例子。

原文由 shift66 发布,翻译遵循 CC BY-SA 3.0 许可协议

不可能通过 mockito。来自他们的 维基

为什么 Mockito 不模拟私有方法?

首先,我们对模拟私有方法并不教条。我们只是不关心私有方法,因为从测试的角度来看私有方法不存在。以下是 Mockito 不模拟私有方法的几个原因:

它需要对永远不会防弹的类加载器进行黑客攻击,并且它会更改 api(您必须使用自定义测试运行器、注释类等)。

这很容易解决——只需将方法的可见性从私有更改为受包保护(或受保护)。

它需要我花时间实施和维护它。考虑到第 2 点和它已经在不同的工具(powermock)中实现的事实,它没有意义。

最后… 模拟私有方法暗示 OO 理解有问题。在 OO 中,您希望对象(或角色)进行协作,而不是方法。忘记 pascal 和程序代码。思考对象。

原文由 Aravind Yarram 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题