原来的代码如下:
@Component
public class TargetChargeFinder {
@Autowired
ChargeRepository chargeRepository;
mock bean chargeRepository一直失败,且其值一直为null。原因在于,测试的地方,对于TargetChargeFinder没有采取注入的方式加入测试类当中,而是new的
private TargetChargeFinder finder;
mock的时候,需要获取到成员变量chargeRepository,该成员变量既没有构造方法,也没有set方法,因此没有办法对其赋值,因此mock一直失败。
解决办法一,加入构造方法参数
@AllArgsConstructor
@Component
public class TargetChargeFinder {
ChargeRepository chargeRepository;
在测试类当中像下面这么写:
@MockBean
ChargeRepository chargeRepository;
....
finder = new TargetChargeFinder(chargeRepository);
方法而,使用set方法赋值
@MockBean
ChargeRepository chargeRepository;
....
finder = new TargetChargeFinder();
finder.chargeRepository = this.chargeRepository;