小不点传奇 2020-09-24 18:11 采纳率: 0%
浏览 397

UT单元里,如何用jmockit工具来mock业务代码中的feignClient的调用啊?

公司突然要求写测试用例,然后我在网上查阅了相关资料,主要为jmockit和

mockito
两种方式,后来种种尝试后觉得jmockit更上手,于是后期一直沿用,各种得心应手。但是最近某个业务需要内部调用另一个工程的接口,结果就一直卡在这里了。

业务类IopActivitySVImpl部分代码如下:

     @Autowired
     private CapabilityFeignClient capabilityFeignClient;


     String activityId = req.getActivityId();
     String dealComment = req.getDealComment();
     AuditResultFeedbackReq resultFeedbackReq = getAuditResultFeedbackReq(activityId, dealType, req.getDealComment(), actInfo.getFlow());
    capabilityFeignClient.auditIopActivity(resultFeedbackReq);

然后我在测试类IopActivityControllerTest里面是这样mock:

//调用外部接口进行mock
     @Autowired
     private CapabilityFeignClient capabilityFeignClient;

     new Expectations(capabilityFeignClient){
            {
                capabilityFeignClient.auditIopActivity(withAny(new AuditResultFeedbackReq()));
                result = resultFeedbackResp;
            }
        };

执行覆盖率后报错,new Expectations(capabilityFeignClient) 不支持接口类型的录制
于是我又创建了一个CapabilityFeignClient的实现类capabilityFeignClientStub,并给了别名,如下:

@Component("capabilityFeignClient")
public class CapabilityFeignClientStub implements CapabilityFeignClient {      
       方法返回null, 此处代码省略。。。
}

然后在CapabilityFeignClient接口的注解里加上 “qualifier”属性,值为上面的实现类别名

@FeignClient(value = "capability-manager-mp", qualifier = "capabilityFeignClient")
public interface CapabilityFeignClient {
    代码省略..
}

最后在测试类IopActivityControllerTest和业务类IopActivitySVImpl中注入
@Autowired private CapabilityFeignClient capabilityFeignClient的地方又追加了@Qualifier("capabilityFeignClient")
变为:

    @Autowired
    @Qualifier("capabilityFeignClient")  --此注解为追加,与feign实现类的别名保持一致
    private CapabilityFeignClient capabilityFeignClient;

但是最后执行测试类覆盖率时还是失败了,这次报错原因是,业务代码走到调用feign时未执行我预期录制的代码块(new Expectations(capabilityFeignClient){}里面的内容)

一直尝试,一直不成功,困扰了我好几天了,求大佬帮忙看一下。

  • 写回答

1条回答 默认 最新

  • threenewbee 2020-09-24 19:36
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 我想在WPF的Model Code中获取ViewModel Code中的一个参数
  • ¥15 arcgis处理土地利用道路 建筑 林地分类
  • ¥20 使用visual studio 工具用C++语音,调用openslsx库读取excel文件的sheet问题
  • ¥100 寻会做云闪付tn转h5支付链接的技术
  • ¥15 DockerSwarm跨节点无法访问问题
  • ¥15 使用dify通过OpenAI 的API keys添加OpenAI模型时报了“Connection Error”错误
  • ¥40 想找个软件,但我不知道怎么找到它,我甚至不知道有没有
  • ¥15 怎么把60秒的视频时长改成显示0秒?且视频内容没有任何变化的正常播放?目的是为了解决一些平台对视频时长的要求,最好有自动处理的工具!
  • ¥15 累加器设初值为00H
  • ¥15 webAPI接口返回值判断