javascript
SpringBoot单元测试的@RunWith与@SpringBootTest注解
SpringBoot測試類注解示例:
import org.junit.runner.RunWith; import org.springframework.boot.test.context.SpringBootTest;@RunWith(SpringRunner.class) @SpringBootTest(classes = GeneratorApp.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) public class UserTest { }1. @RunWith(SpringRunner.class)
目的: 為了讓測試在Spring容器環境下執行。
@RunWith是JUnit的一個注解, 用來告訴JUnit不要使用內置的方式進行單元測試, 而應該使用指定的類做單元測試 對于Spring單元測試總是要使用 SpringRunner.class。
@RunWith 就是一個運行器,Test測試類需要使用Spring注入的類,例如@Autowired注入的類,使用@RunWith(SpringRunner.class)注解,注入的類才能實例化到Spring容器中,自動注入方能生效,否則會返回NullPointerExecption。
2. @SpringBootTest
目的: 加載ApplicationContext,啟動spring容器。
@SpringBootTest注解是SpringBoot自1.4.0版本開始引入的一個用于測試的注解。
@SpringBootTest的classes 屬性指向一個啟動類或配置啟動類
注:
SpringBootTest.WebEnvironment.RANDOM_PORT啟動一個真實的web服務,會隨機生成一個端口號。
一 般情況下,使用@SpringBootTest后,Spring將加載所有被管理的bean,基本等同于啟動了整個服務,此時便可以開始功能測試。
由于web服務是最常見的服務,且我們對于web服務的測試有一些特殊的期望,所以@SpringBootTest注解中,給出了webEnvironment參數指定了web的environment,該參數的值一共有四個可選值:
- MOCK:此值為默認值,該類型提供一個mock環境,可以和@AutoConfigureMockMvc或@AutoConfigureWebTestClient搭配使用,開啟Mock相關的功能。注意此時內嵌的服務(servlet容器)并沒有真正啟動,也不會監聽web服務端口。
- RANDOM_PORT:啟動一個真實的web服務,監聽一個隨機端口。
- DEFINED_PORT:啟動一個真實的web服務,監聽一個定義好的端口(從application.properties讀取)。
- NONE:啟動一個非web的ApplicationContext,既不提供mock環境,也不提供真實的web服務。
注:如果當前服務的classpath中沒有包含web相關的依賴,spring將啟動一個非web的ApplicationContext,此時的webEnvironment就沒有什么意義了。
其他拓展:
引用文章:http://ypk1226.com/2018/11/20/spring-boot/spring-boot-test-2/
總結
以上是生活随笔為你收集整理的SpringBoot单元测试的@RunWith与@SpringBootTest注解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 与恐龙共舞 1. 内存报警
- 下一篇: gradle idea java ssm