超类中的模拟最终方法

Mock final method in superclass

我正在创建一个扩展 AbstractScheduledService 的新服务 'MyService' 并且 MyService 从它继承最终方法 isRunning()

public class MyService extends AbstractScheduledService {}

我还对 'MyService' 进行了健康检查,调用 isRunning() 以查看 'MyService' 是否健康。

public class MyServiceHealthcheck {
       MyService myService;
       
       @Inject
       public MyServiceHealthCheck(MyService myService) {
          this.myService = myService;
       }

       public boolean isHealthy() {
          return myService.isRunning();
       }
}

最后,我正在尝试创建单元测试 'MyServiceHealthcheckTest' 以测试 MyServiceHealthcheck

public class MyServiceHealthcheckTest {
       @Mock MyService myService;
}

模拟已正确初始化,我能够获得 MyService 中定义的方法的预期值,但 myService.isRunning() 总是 returns 一个 NullPointerException .模拟 isRunning() 方法的最佳方法是什么?

您需要配置 Mockito,以便可以模拟 final 类 和方法。为此,您需要将名为 org.mockito.plugins.MockMaker 的文本文件添加到您的项目 src/test/resources/mockito-extensions 目录中。它应该包括一行文本,如下所示:mock-maker-inline.