單元測試報錯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 目錄下也新建一份,一般的配置文件,比如配置數據庫連接的文件,是不需要這么搞的。

 

  原創文章,歡迎轉載,轉載請注明出處!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM