解决ut 测试案例jackson 序列化mockito mock对象时出现无限递归问题

前提背景

1. 当前httpUtil中里面有个public的静态类httpResponse,每次http调用后创建这个静态类对象返回,无法new 出,只能通过其他方法调用后进行build方法调用在httpUtil类中创建对象返回

2.在测试案例中,mock了url方法调用返回httpResponse,

HttpUtils.HttpResponse resp = Mockito.mock(HttpUtils.HttpResponse.class);
Mockito.when(resp.getBody()).thenReturn("ok");
Mockito.when(resp.getStatusCode()).thenReturn(200);

3.跑测试案例的时候发现报错mockito Infinite recursion (StackOverflowError),详细查看发现是mock httpResponse后使用,使用了jackson进行httpResponse的json序列化打印日志。

 

debug后发现,mockito mock对象时,会对mock对象加上了一些隐藏的属性,而这个属性中,是带有循环依赖的,导致jackson序列化时造成栈溢出。

 

 

解决方法:

方法一:本地跑案例时,通过在对象中添加,可以针对有get方法的才进行序列化,避免对mockitoINterceptor对象进行序列化调用。

@JsonAutoDetect(getterVisibility = JsonAutoDetect.Visibility.NONE, isGetterVisibility = JsonAutoDetect.Visibility.NONE)

但项目提交后,运行整体test的话还是没有效果。

 

方法二:直接添加JacksonAnnotationIntrospector,对属性名称带有mockito的不做序列化,两边都可行

 

 

附:mockito的一些常用方法

https://blog.csdn.net/u014471561/article/details/89417754 

posted @   klm-kain  阅读(401)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!
点击右上角即可分享
微信分享提示