首页 > 解决方案 > 超类中的模拟最终方法

问题描述

我正在创建一个扩展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()始终返回 NullPointerException。模拟isRunning()方法的最佳方法是什么?

标签: javaunit-testingjunitmockito

解决方案


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


推荐阅读