前言
軟體測試的重要性毋庸置疑。大部分公司主業務的支撐軟體,在開發時都會要求編寫測試。在日常開發中,也有不少要求我們寫測試的場景,例如你將要開源擴充套件包,擁有完整測試永遠是加分項 ?。
專案環境
- JDK 14
- Gradle 6.3
- macOS 10.15
- SpringBoot 2.3.4
JUnit 介紹
大部分新手在測試程式的時候,喜歡用 System.out.println()
方法,直接把結果列印出來,看看結果是否符合預期。這種方法在測試程式碼量很小、邏輯簡單的程式時很方便。在實際生產專案中,我們可以嘗試一下 JUnit 工具。
JUnit 是 Java 語言的測試框架。它可以根據測試資料來驗證程式正確性,並且測試程式碼與工程程式碼分離。只要在方法上加上 @Test
註解,JUint 就能識別到這個方法。
引入依賴
這裡我們使用的構建工具是 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);
}
建立 DemoServiceImpl 類,實現 DemoService 介面。這裡可使用 ⌥ + ⏎ 快速建立介面實現類。
@Service
public class DemoServiceImpl implements DemoService {
@Override
public String sayHelloTo(String name) {
return "say hello to " + name;
}
}
SpringBoot 的單元測試寫在 src/tests
目錄下,如果你使用的是 IDEA IDE,可按下 ⇧ + ⌘ + T 來快速建立測試檔案。
@SpringBootTest
class DemoServiceTest {
@Autowired
private DemoService demoService;
@Test
void sayHelloTo() {
String result = demoService.sayHelloTo("developer");
Assertions.assertEquals("say hello to developer", result);
}
}
上面就是最簡單的單元測試寫法,注入 @SpringBootTest 註解即可。想要執行的時候,滑鼠放在對應的方法,右鍵選擇 run。
測試 Controller 層
編寫一份 DemoController,建立一個 sayHelloTo
方法,並且注入 DemoService
介面。
@RestController
public class DemoController {
@Autowired
private DemoService demoService;
@GetMapping("demo")
public String sayHelloTo(String name) {
return demoService.sayHelloTo(name);
}
}
沿用 ⇧ + ⌘ + T 快捷鍵建立控制器測試類,這裡用到了 MockMvc,MockMvc 是由 spring-test 包提供,實現了對 HTTP 請求的模擬,能夠直接使用網路的形式,轉換到 Controller 的呼叫,使得測試速度快、不依賴網路環境。同時提供了一套驗證的工具,結果的驗證十分方便。
@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 以及返回的內容,並將整個響應結果輸出出來。
總結
這裡非常簡單的過了一遍 SpringBoot 單元測試流程,也只是作為一個入門實踐記錄在這兒。對 JUnit 和 MockMvc 有了一個最基礎的認識,有興趣的夥伴可以自己查詢一些資料進行深入學習。
本作品採用《CC 協議》,轉載必須註明作者和本文連結