如何在mockito中全局模拟方法调用?

Kas*_*nek 5 mockito

我需要全局模拟类方法。

我的意思是,我无法创建模拟对象和存根方法。我的 api 不将此对象作为参数,因此我无法在函数调用中传递它,但此类的对象是在这些函数内部创建并在那里使用的。这就是为什么我需要在全球范围内嘲笑它。

class A {
  public void methodA() {}  
}
Run Code Online (Sandbox Code Playgroud)

我需要模拟 methodA()。

我可以想象通过mockito实现它几乎是不可能的。有谁知道如何实现这一目标?或者我应该重写我的代码?

ben*_*min 0

你应该重写你的代码。

你写了:

此类的对象在这些函数内创建并在那里使用

如果您想要一个可测试的系统,这通常是一个坏主意。您提到的函数不应自己创建对象,因为它们甚至不应该知道它们来自哪里或谁提供该对象。

更好的方法是让这些函数与接口一起使用。然后,该接口的实现者将成为该函数的参数,或者被注入到该函数所属的对象中,例如通过构造器。

阅读有关这些问题的控制反转依赖注入。这些概念对于维护模块化且可测试的系统至关重要。许多应用程序开发框架提供了使用依赖项注入开发应用程序所需的工具。