解決Spring boot 整合Junit遇到的坑
這是我在使用springboot整合Junit的時候遇到的坑
1.在pom.xml中添加junit環(huán)境的依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
2.在src/test/java下建立測試類
例:
@RunWith(value = SpringJUnit4ClassRunner.class)
@SpringBootTest(classes={Demo.class}) // **注意:啟動類為自己編寫的(這是個坑)**
public class serviceTest {
@Autowired
private serviceImpl serviceimpl;
@Test
public void testAdd() {
this.serviceimpl.add();
}
}
3.自己編寫的啟動類
@SpringBootApplication
public class Demo {
public static void main(String[] args) {
SpringApplication springApplication = new SpringApplication(Demo.class);
// 這個是關(guān)閉springboot啟動時候的圖標可以不設置
springApplication.setBannerMode(Banner.Mode.OFF);
springApplication.run(args);
}
}
說明:
@RunWith:啟動器 SpringJUnit4ClassRunner.class:讓 junit 與 spring 環(huán)境進行整合
@SpringBootTest(classes={App.class})
1:當前類為 springBoot 的測試類
2:加載 SpringBoot 啟動類(啟動類為自己編寫的啟動類(這是個坑))。啟動SpringBoot
SpringBoot 整合Junit測試注入Bean失敗
java.lang.IllegalStateException: Failed to load ApplicationContext
問題描述
我是在springboot整合測試的時候報錯的。運行就是報各種bean找不到。
版本:springboot-1.5.12 + junit4.12
這個問題卡了半天才解決。從網(wǎng)上搜了若干個博客都試了,基本上都沒有用。
什么加@WebAppConfiguration這個注解啊,加那個注解的,全沒用。
下面是我的測試類
11111
解決過程
我仔細觀察了一下啟動類,因為這個@SpringBootTest我是設置的啟動類的。才發(fā)現(xiàn)原來注入的這些找不到的bean,實際上都是啟動類當中使用依賴注入的對象。
以下是我的啟動類

由此我推斷,雖然springboot自帶了掃描包(默認掃描規(guī)則就是啟動類以上的子包),但是他可能是遵循java的由上而下執(zhí)行代碼規(guī)律,因為他畢竟是整合測試,他和直接從啟動類啟動項目是不一樣的概念。在他要依賴注入這個對象的時候,而實際上這個對象并沒有放到容器當中,這時候就會產(chǎn)生注入不成功。
最終在啟動類添加了一個@ComponentScan(basePackages = {“com.xjgx”})掃描全包。成功解決!
在配置類上添加 @ComponentScan 注解。該注解默認會掃描該類所在的包下所有的配置類,相當于之前的 context:component-scan。
總結(jié)
springboot整合junit測試方法,實際上就這兩個注解就可以了。
@RunWith(SpringRunner.class)
@SpringBootTest(classes = EhrApplication.class)
public class EhrApplicationTest {
@Autowired
HealthExamReSerivice healthExamReSerivice;
@Test
public void contextLoads() {
}
}
假如啟動類使用到了依賴注入對象,這個時候需要在啟動類上添加掃描包。
@ComponentScan(basePackages = {"com.xjgx"})
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
基于Gradle搭建Spring?5.3.13-release源碼閱讀環(huán)境的詳細流程
這篇文章主要介紹了基于Gradle搭建Spring?5.3.13-release源碼閱讀環(huán)境,首先安裝jdk、gradle等一系列必要操作,本文通過實例代碼相結(jié)合給大家講解的非常詳細,需要的朋友可以參考下2022-04-04
springboot3.x版本集成log4j遇到Logging?system?failed?to?initial
使用Springboot?3.x集成Log4j時可能會遇到版本沖突的問題,這通??梢酝ㄟ^檢查Maven依賴樹來識別,一旦發(fā)現(xiàn)沖突,將Log4j的版本統(tǒng)一更新到最新的兼容版本,例如2.21.1,即可解決問題,此方法有效解決了日志打印錯誤,是處理類似問題的一個實用參考2024-09-09

