项目场景:

在Spring单元测试的时候容易发生的bug


问题描述:

严重: Caught exception while allowing TestExecutionListener [org.springframework.test.context.support.DependencyInjectionTestExecutionListener@3cbbc1e0] to prepare test instance [Annotest@2cdd0d4b]
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'Annotest': Unsatisfied dependency expressed through field 'target'; nested exception is org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named 'target' is expected to be of type 'com.sxit.anno.Target' but was actually of type 'com.sun.proxy.$Proxy18'at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:587)at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:91)at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:373)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1344)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireBeanProperties(AbstractAutowireCapableBeanFactory.java:399)at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:118)at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:83)at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:246)at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:227)at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:289)at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:291)at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:246)at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)at org.junit.runners.ParentRunner.run(ParentRunner.java:363)at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:190)at org.junit.runner.JUnitCore.run(JUnitCore.java:137)at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33)at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:230)at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:58)
Caused by: org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named 'target' is expected to be of type 'com.sxit.anno.Target' but was actually of type 'com.sun.proxy.$Proxy18'at org.springframework.beans.factory.support.DefaultListableBeanFactory.checkBeanNotOfRequiredType(DefaultListableBeanFactory.java:1527)at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1505)at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1104)at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1065)at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:584)... 27 moreorg.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'Annotest': Unsatisfied dependency expressed through field 'target'; nested exception is org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named 'target' is expected to be of type 'com.sxit.anno.Target' but was actually of type 'com.sun.proxy.$Proxy18'at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:587)at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:91)at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:373)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1344)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireBeanProperties(AbstractAutowireCapableBeanFactory.java:399)at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:118)at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:83)at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:246)at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:227)at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:289)at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:291)at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:246)at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)at org.junit.runners.ParentRunner.run(ParentRunner.java:363)at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:190)at org.junit.runner.JUnitCore.run(JUnitCore.java:137)at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33)at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:230)at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:58)
Caused by: org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named 'target' is expected to be of type 'com.sxit.anno.Target' but was actually of type 'com.sun.proxy.$Proxy18'at org.springframework.beans.factory.support.DefaultListableBeanFactory.checkBeanNotOfRequiredType(DefaultListableBeanFactory.java:1527)at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1505)at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1104)at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1065)at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:584)... 27 more

主要原因是在测试时注入的是具体实现而不是接口


原因分析:

为什么@Autowired使用在interface上而不是实现类上?首先,一般使用接口是很常用并且有益的变成技术。其次,在spring中,你可以在运行过程中注入各种实现。一个很经典的情况就是在测试阶段,注入模拟的实现类。


解决方案:

将注入的实现类换成向上的接口

Caught exception while allowing TestExecutionListener [org.springframework.test.context.support.Depe相关推荐

  1. 严重: Caught exception while allowing TestExecutionListener [org.springframework.test.context.support.

    严重: Caught exception while allowing TestExecutionListener [org.springframework.test.context.support. ...

  2. Caught exception while allowing TestExecutionListener异常日志

    严重: Caught exception while allowing TestExecutionListener [org.springframework.test.context.support. ...

  3. ERROR TestContextManager:234 - Caught exception while allowing TestExecutionListener [org.springfram

    由于一些不可抗力因素的影响,在idea中进行单元测试出现了如下异常 @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration({&qu ...

  4. Caught exception while allowing TestExecutionListener spring-mvc 单元测试出现的问题

    @Autowired UserServiceimpl us; 在spring-mvc单元测试时,注入的是接口,而不是接口的实现,希望大家能避开这个坑 405 ERRORTestContextManag ...

  5. Caught exception while allowing TestExecutionListener

    Caught exception while allowing TestExecutionListener 严重: Caught exception while allowing TestExecut ...

  6. Exception: Caught exception while allowing TestExecutionListener

    前提 SpringBoot版本 <parent><groupId>org.springframework.boot</groupId><artifactId& ...

  7. Caught exception while allowing TestExecutionListener [org.xx.ServletTestExecutionListener@xx]

    springboot测试类启动报错 ERROR org.springframework.test.context.TestContextManager  : Caught exception whil ...

  8. java.lang.NoSuchMethodError: org.springframework.web.context.support.XmlWebApplicationContext.getEnv

    转自:https://blog.csdn.net/u012941811/article/details/16960493 ava.lang.NoSuchMethodError: org.springf ...

  9. 【ClickHouse】<Error> Application: Caught exception while loading metadata: Code: 231. DB::Exception

    异常描述 重启clickhouse后,发现服务一直不可用,日志报错: <Error> Application: Caught exception while loading metadat ...

最新文章

  1. python3.6 messagebox_Python Tkinter GUI编程入门介绍
  2. 操作系统中的进程与线程
  3. linux java多线程_Java多线程从简单到复杂
  4. 驱动提取软件_深入分析施耐德工控软件代码执行漏洞
  5. Re:从零开始的Vue项目搭建
  6. c++ vscode 自动注释_WIN下vscode调试C/C++,从零开始生成helloworld项目【2018年6月29日】...
  7. LCN分布式事务框架实战
  8. 计算机 旧词新说_如何使旧计算机再次有用
  9. 计算机导航医学应用,计算机导航技术在口腔颌面外科应用中的新发展
  10. webpack的可视化资源分析工具webpack-bundle-analyzer的使用
  11. override java field_JAVA方法的重载(overload)和覆盖(override)
  12. ps cs6导出html,渲染视频使用不了是怎么回事?pscs6ex – 手机爱问
  13. UE4 Linux交叉编译Clang下载
  14. C语言:斐波那契数列
  15. 小米笔记本Air13.3扩充硬盘
  16. 在 Java 应用程序中访问 USB 设备
  17. 寄昙说 剑子仙迹 天之佛
  18. Tomcat多层容器的设计
  19. 免费4s店汽车保养维修记录查询的方式
  20. string.Format字符串格式说明

热门文章

  1. Planet explorer:免费获取高分辨率影像的网站
  2. css基础教程【学习笔记】
  3. 【关于几个问题的思考】
  4. [附源码]计算机毕业设计springboot本地助农产品销售系统
  5. chmod 数字解释
  6. soft Windows精品软件收集
  7. 对一元二次方程ax2+bx+c=0,输入该方程的三个实系数a,b,c(输入的数值应保证方程有实根),计算并输出该方程的两个实根。
  8. 高德、百度瓦片地图免费下载
  9. 在线直线度检测仪的发展
  10. CSUOJ 1503: 点到圆弧的距离 [叉积+三角形外心]【计算几何】