解决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