单元测试报错NoSuchBeanDefinitionException

Posted acm-bingzi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单元测试报错NoSuchBeanDefinitionException相关的知识,希望对你有一定的参考价值。

问题

  在SpringBoot项目开发时,使用单元测试来运行一个Service,发现调用的一个Bean就是找不到,报错为:

  org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type ‘com.gaosiedu.gsl.mq.base.MqSendService‘ available: expected at least 1 bean which qualifies as autowire candidate.

  这个意思大概翻译是:找不到符合条件的bean。

  但是我明确的定义了这个bean,只是用的不是注解的方式,而是用的xml 的方式。

  在springboot项目的main类里,添加了注解 @ImportResource,在对应的配置文件里添加了这个bean的定义,如下:

 @ImportResource({
  "classpath:*dubbo-*-spring.xml",
  "classpath:*mq-*-spring.xml"
})

 

解决

  最终发现,原因是@ImportResource注解中指定的classpath,在服务器中正式运行的时候,和单元测试的时候,指的不是同一个地方

  在服务器正式运行时,需要在文件夹类型为【Sources Root】的文件夹下
  在单元测试时,需要在文件夹类型为【Test Sources Root】的文件夹下

  如何设置文件夹类型呢?只需要在文件夹上右键,选择【Mark Directory as】,如图:

  技术图片

  正常情况下,main/resources 是【Sources Root】类型,test/resources是【Test Sources Root】test类型
  我之前只是在main/resources 下新建了配置文件,所以才会报错。当把对应的两个配置文件拷贝到test/resources 目录下就没问题了

  PS:只有明确写明了classpath: 的配置文件才需要在test 目录下也新建一份,一般的配置文件,比如配置数据库连接的文件,是不需要这么搞的。

 

  原创文章,欢迎转载,转载请注明出处!

以上是关于单元测试报错NoSuchBeanDefinitionException的主要内容,如果未能解决你的问题,请参考以下文章

Django 单元测试报错没有创建数据表

单元测试 使用 Effort 内存数据库 报错

SpringBoot单元测试启动报错

dao层单元测试报错CONDITIONS EVALUATION REPORT

使用Junit单元测试报错“No runnable methods“

78 单独执行项目的两个单元测试都没有问题, 但是 mvn install 执行单元测试其中一个报错