SpringBoot 單元測試入門實踐

image

前言

軟件測試的重要性毋庸置疑。大部分公司主業(yè)務(wù)的支撐軟件,在開發(fā)時都會要求編寫測試。在日常開發(fā)中,也有不少要求我們寫測試的場景,例如你將要開源擴展包,擁有完整測試永遠是加分項 ??。

項目環(huán)境

  • JDK 14
  • Gradle 6.3
  • macOS 10.15
  • SpringBoot 2.3.4

JUnit 介紹

大部分新手在測試程序的時候,喜歡用 System.out.println() 方法,直接把結(jié)果打印出來,看看結(jié)果是否符合預(yù)期。這種方法在測試代碼量很小、邏輯簡單的程序時很方便。在實際生產(chǎn)項目中,我們可以嘗試一下 JUnit 工具。

JUnit 是 Java 語言的測試框架。它可以根據(jù)測試數(shù)據(jù)來驗證程序正確性,并且測試代碼與工程代碼分離。只要在方法上加上 @Test 注解,JUint 就能識別到這個方法。

引入依賴

這里我們使用的構(gòu)建工具是 gradle,所以打開 build.gradle 文件引入依賴。該依賴包含了 JUnit 等,所以無需再單獨引入 JUnit。

implementation 'org.springframework.boot:spring-boot-starter-test:2.3.4.RELEASE'

測試 Service 層

編寫一份 DemoService 接口,該接口只有一個 sayHelloTo 方法來用于我們簡單的單元測試。

public interface DemoService {
    /**
     * Hello World!
     * @param name 名稱
     * @return String
     */
    String sayHelloTo(String name);
}

創(chuàng)建 DemoServiceImpl 類,實現(xiàn) DemoService 接口。這里可使用 ? + ? 快速創(chuàng)建接口實現(xiàn)類。

@Service
public class DemoServiceImpl implements DemoService {
    @Override
    public String sayHelloTo(String name) {
        return "say hello to " + name;
    }
}

SpringBoot 的單元測試寫在 src/tests 目錄下,如果你使用的是 IDEA IDE,可按下 ? + ? + T 來快速創(chuàng)建測試文件。

@SpringBootTest
class DemoServiceTest {
    @Autowired
    private DemoService demoService;
    @Test
    void sayHelloTo() {
        String result = demoService.sayHelloTo("developer");
        Assertions.assertEquals("say hello to developer", result);
    }
}

上面就是最簡單的單元測試寫法,注入 @SpringBootTest 注解即可。想要執(zhí)行的時候,鼠標放在對應(yīng)的方法,右鍵選擇 run。

測試 Controller 層

編寫一份 DemoController,創(chuàng)建一個 sayHelloTo 方法,并且注入 DemoService 接口。

@RestController
public class DemoController {
    @Autowired
    private DemoService demoService;

    @GetMapping("demo")
    public String sayHelloTo(String name) {
        return demoService.sayHelloTo(name);
    }
}

沿用 ? + ? + T 快捷鍵創(chuàng)建控制器測試類,這里用到了 MockMvc,MockMvc 是由 spring-test 包提供,實現(xiàn)了對 HTTP 請求的模擬,能夠直接使用網(wǎng)絡(luò)的形式,轉(zhuǎn)換到 Controller 的調(diào)用,使得測試速度快、不依賴網(wǎng)絡(luò)環(huán)境。同時提供了一套驗證的工具,結(jié)果的驗證十分方便。

@AutoConfigureMockMvc
@SpringBootTest
class DemoControllerTest {

    @Autowired
    private MockMvc mvc;

    @Test
    public void sayHelloTo() throws Exception {
        mvc.perform(MockMvcRequestBuilders.get("/demo?name=developer"))
                .andExpect(MockMvcResultMatchers.status().isOk())
                .andExpect(MockMvcResultMatchers.content().string("say hello to developer"))
                .andDo(MockMvcResultHandlers.print());
    }
}

這里簡單的使用 MockMvc 測試 API 接口返回的 HTTP STATUS CODE 以及返回的內(nèi)容,并將整個響應(yīng)結(jié)果輸出出來。

總結(jié)

這里非常簡單的過了一遍 SpringBoot 單元測試流程,也只是作為一個入門實踐記錄在這兒。對 JUnit 和 MockMvc 有了一個最基礎(chǔ)的認識,有興趣的伙伴可以自己查詢一些資料進行深入學習。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容