解決Spring boot 整合Junit遇到的坑

這是我在使用springboot整合Junit的時候遇到的坑

1.在pom.xml中添加junit環境的依賴

<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);
     // 這個是關閉springboot啟動時候的圖標可以不設置
    springApplication.setBannerMode(Banner.Mode.OFF); 
    springApplication.run(args);
}
}

說明:

@RunWith:啟動器 SpringJUnit4ClassRunner.class:讓 junit 與 spring 環境進行整合

@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

這個問題卡瞭半天才解決。從網上搜瞭若幹個博客都試瞭,基本上都沒有用。

什麼加@WebAppConfiguration這個註解啊,加那個註解的,全沒用。

下面是我的測試類

11111

解決過程

我仔細觀察瞭一下啟動類,因為這個@SpringBootTest我是設置的啟動類的。才發現原來註入的這些找不到的bean,實際上都是啟動類當中使用依賴註入的對象。

以下是我的啟動類

由此我推斷,雖然springboot自帶瞭掃描包(默認掃描規則就是啟動類以上的子包),但是他可能是遵循java的由上而下執行代碼規律,因為他畢竟是整合測試,他和直接從啟動類啟動項目是不一樣的概念。在他要依賴註入這個對象的時候,而實際上這個對象並沒有放到容器當中,這時候就會產生註入不成功。

最終在啟動類添加瞭一個@ComponentScan(basePackages = {“com.xjgx”})掃描全包。成功解決!

在配置類上添加 @ComponentScan 註解。該註解默認會掃描該類所在的包下所有的配置類,相當於之前的 context:component-scan。

總結

springboot整合junit測試方法,實際上就這兩個註解就可以瞭。

@RunWith(SpringRunner.class)
@SpringBootTest(classes = EhrApplication.class)
public class EhrApplicationTest {
	@Autowired
	HealthExamReSerivice healthExamReSerivice;	
	@Test
	public void contextLoads() {		
	}
}

假如啟動類使用到瞭依賴註入對象,這個時候需要在啟動類上添加掃描包。

@ComponentScan(basePackages = {"com.xjgx"})

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。

推薦閱讀: