springboot单元测试依赖踩坑记录

 更新时间:2023年03月21日 09:10:58   作者:Sokasa_BiuBiuBiu  
这篇文章主要介绍了springboot单元测试依赖踩坑记录及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

springboot单元测试依赖踩坑

在进行springboot 单元测试的时候,发现如下错误。

java.lang.IllegalStateException: Could not load CacheAwareContextLoaderDelegate [class org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate]

    at org.springframework.test.context.BootstrapUtils.createCacheAwareContextLoaderDelegate(BootstrapUtils.java:103)
    at org.springframework.test.context.BootstrapUtils.createBootstrapContext(BootstrapUtils.java:72)
    at org.springframework.test.context.TestContextManager.<init>(TestContextManager.java:124)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTestContextManager(SpringJUnit4ClassRunner.java:151)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.<init>(SpringJUnit4ClassRunner.java:142)
    at org.springframework.test.context.junit4.SpringRunner.<init>(SpringRunner.java:49)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:104)
    at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:86)
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
    at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:26)
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
    at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:33)
    at org.junit.internal.requests.FilterRequest.getRunner(FilterRequest.java:36)
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:49)
    at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
    at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate]: Unresolvable class definition; nested exception is java.lang.NoSuchMethodError: org.springframework.core.KotlinDetector.isKotlinReflectPresent()Z
    at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:132)
    at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:152)
    at org.springframework.test.context.BootstrapUtils.createCacheAwareContextLoaderDelegate(BootstrapUtils.java:100)
    ... 20 more
Caused by: java.lang.NoSuchMethodError: org.springframework.core.KotlinDetector.isKotlinReflectPresent()Z
    at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:171)
    at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:122)
    ... 22 more

一天以前单测是能跑的,初步预计是依赖的问题。但是因为项目是多模块结构,模块与模块之间的引用比较多,需要排查每一个模块是否有问题。

如下步骤

  • 1. 在出现问题的单测归属模块的pom文件中,找到所有模块间依赖
  • 2. 依次到各个模块进行单元测试,定位问题模块
  • 3. 排查问题模块的依赖问题

一番折腾,发现问题模块 carrier-api

再往下深入,检查carrier-api依赖

很幸运,一眼就发现了问题所在, 这里的spring-web的引用导致了错误的发生。将该引用注释掉,并且将相关代码进行引用替换。

问题解决

总结

1. spring-boot-starter-test 依赖包含了junit ,springboot 单测的话建议使用该依赖,包含了很多东西

2. 使用spring-boot-test 的话, 需要单独引入 spring-test, junit 依赖,否则无法单测

3. 无论是1还是2. 他们都和 spring-web 依赖冲突, 只要引入这个依赖,单测就无法运行

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java如何获取List<String>中的String详解

    Java如何获取List<String>中的String详解

    工作了这么长时间了,一直没有记录的习惯,以至于导致我即便是查过的东西总会忘记,下面这篇文章主要给大家介绍了关于Java如何获取List<String>中String的相关资料,需要的朋友可以参考下
    2022-02-02
  • Java 深入探讨设计模式之原型模式篇

    Java 深入探讨设计模式之原型模式篇

    设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性
    2021-10-10
  • Spring中的@Repository注解源码详解

    Spring中的@Repository注解源码详解

    这篇文章主要介绍了Spring中的@Repository注解详解,@Repository注解修饰哪个类,则表明这个类具有对对象进行增删改查的功能,而且@Repository是@Component注解的一个派生品,所以被@Repository注解的类可以自动的被@ComponentScan通过路径扫描给找到,需要的朋友可以参考下
    2023-10-10
  • java获取redis日志信息与动态监控信息的方法

    java获取redis日志信息与动态监控信息的方法

    这篇文章主要给大家介绍了关于java如何获取redis日志信息与动态监控信息的方法,文中介绍的非常详细,对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。
    2017-04-04
  • Java Netty实现心跳机制过程解析

    Java Netty实现心跳机制过程解析

    这篇文章主要介绍了Java Netty实现心跳机制过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • SpringBoot实现自定义线程池的方法

    SpringBoot实现自定义线程池的方法

    这篇文章主要介绍了SpringBoot中的自定义线程池解析,实现自定义线程池重写spring默认线程池的方式使用的时候,只需要加@Async注解就可以,不用去声明线程池类,需要的朋友可以参考下
    2023-11-11
  • Springboot WebFlux集成Spring Security实现JWT认证的示例

    Springboot WebFlux集成Spring Security实现JWT认证的示例

    这篇文章主要介绍了Springboot WebFlux集成Spring Security实现JWT认证的示例,帮助大家更好的理解和学习使用springboot框架,感兴趣的朋友可以了解下
    2021-04-04
  • java web项目里ehcache.xml介绍

    java web项目里ehcache.xml介绍

    java web项目里ehcache.xml介绍,需要的朋友可以参考一下
    2013-03-03
  • Java中闭包简单代码示例

    Java中闭包简单代码示例

    这篇文章主要介绍了Java中闭包简单代码示例,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • 浅谈Java编程之if-else的优化技巧总结

    浅谈Java编程之if-else的优化技巧总结

    说实话,其实我很讨厌在代码里大量使用if-else,一是因为该类代码执行方式属于面向过程的,二嘛,则是会显得代码过于冗余.这篇笔记,主要记录一些自己在工作实践当中针对if-else的优化心得,将会不定期地长期更新,需要的朋友可以参考下
    2021-06-06

最新评论