我正在使用Spring Boot 2.2.4.RELEASE
。
我在我的[[控制器中有这段代码,在这里我使用“免费” DataSourceHealthIndicator
检查数据库是否关闭:
@Autowired
private DataSourceHealthIndicator d;
//some code
if("DOWN".equals(d.getHealth(false).getStatus().getCode())) {
// do something
} else {
// proceed
}
现在,在我的切片测试中,我想模拟它(DataSourceHealthIndicator
),但是我有一个空指针,因为显然getHealth()没有返回Health对象,getStatus()没有返回Status对象...
@WebMvcTest //some code @MockBean private DataSourceHealthIndicator d; //some code given(this.d.getHealth(anyBoolean()).getStatus().getCode()).willReturn("UP");
我该如何嘲笑它?我尝试过:
given(this.d.getHealth(anyBoolean())).willReturn(Health.up().build()); given(this.d.getHealth(anyBoolean()).getStatus()).willReturn(Status.UP); given(this.d.getHealth(anyBoolean()).getStatus().getCode()).willReturn("UP");
但是在给定的第二个语句上失败:org.mockito.exceptions.misusing.WrongTypeOfReturnValue:状态无法通过getHealth()返回getHealth()应该返回Health
移位将DataSourceHealthIndicator代码转换为自己的类。
[这使我可以轻松地对Controller层进行切片测试,同时也使我可以轻松地仅使用MockitoExtension.class
来测试另一个类。SRP和KISS原则在起作用。