【快學springboot】在springboot中寫單元測試

前言

不少公司都有寫單元測試的硬性要求,在提交代碼的時候,若是單測通不過或者說單元測試各類覆蓋率不達標,會被拒絕合併代碼。寫單元測試,也是保證代碼質量的一種方式。java

junit單元測試

相信絕大多數的Java開發者都用過Junit來寫單元測試。spring

引入依賴:數據庫

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
</dependency>
複製代碼

直接在方法上加上@Test註解便可:springboot

加了@Test註解,就會有一個運行的圖標了。mvc

spring的依賴問題

如今的Java開發,基本上離不開spring了。可是使用spring,寫單測的時候就會存在一個依賴注入的問題。spring-boot

假設有以下一個Service:單元測試

@Service
public class TestService {

    public String getString() {
        return "Hello World!";
    }

}
複製代碼

在Junit中直接自動裝配:測試

public class JunitTest {

    @Autowired
    private TestService testService;

    @Test
    public void test() {
        System.out.println(testService.getString());
    }

}
複製代碼

運行報錯:spa

springboot寫單元測試

在springboot中,解決spring依賴問題,很是的簡單。只須要它提供的幾個註解便可:3d

引入依賴:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>
複製代碼

這裏引入了一個spring-boot-starter-test依賴,是springboot中寫單測所須要的。

在單元測試類上添加@RunWith(SpringRunner.class)、@SpringBootTest註解:

這時候就能夠正常的把spring依賴注入進來了,運行方法,能夠看到springboot啓動時的輸出:

若是是經過spring initialize建立的springboot項目(本系列第一篇文章有講解),其實會自動建立一個單元測試類:

咱們在寫單元測試的時候,直接繼承這個類便可。

單元測試事務回滾

寫單元測試,不免須要操做數據庫。有時候單元測試的數據庫跟開發時候的數據庫是同一個,爲了避免影響數據庫的數據,須要在單測完成以後,將操做回滾。這在springboot中也是很容易解決的事情,只須要將單測類繼承AbstractTransactionalJUnit4SpringContextTests便可

數據庫有數據以下:

單元測試類以下:

測試方法以下:

@Test
public void deleteAll() {
    userRepo.deleteAll();
}
複製代碼

執行方法後,若是事務不會滾,則會清除user表中的全部數據。

經過結果查看,單測運行沒有問題,查看數據庫:

數據也沒有被刪除,證實事務已經回滾了。

把繼承的AbstractTransactionalJUnit4SpringContextTests類去掉,再次執行deleteAll方法:

數據庫中的數據已被刪除

總結

本文介紹了springboot中寫單元測試的方法。其實優雅的寫單元測試須要涉及到不少東西,好比mock(mockito、mockmvc等),本文都沒有涉及,有興趣的能夠了解下。

相關文章
相關標籤/搜索