超类中的模拟最终方法
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
.
我正在创建一个扩展 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
.