原創|使用教程|編輯:鄭恭琳|2021-01-21 17:12:36.523|閱讀 278 次
概述:Spring是領先的企業Java應用程序框架,因此需要進行適當級別的測試以確保使用其構建的應用程序的質量和安全性。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
Spring是領先的企業Java應用程序框架,因此需要進行適當級別的測試以確保使用其構建的應用程序的質量和安全性。
Spring框架(以及Spring Boot)是最受歡迎的Java企業軟件框架之一。它在關鍵任務應用程序中的使用意味著它已經受到質量和安全性的審查。
之前,我們討論了盡管開發人員擁有良好的改進記錄,但開發人員如何不喜歡單元測試,并詳細介紹了Parasoft Jtest的單元測試助手如何提供一種指導性的自動化測試方法,以使測試不僅更加可口,而且更容易、更有效。在本文中,我將繼續與Spring框架相同的主題,向您展示如何在這個重要的應用程序框架中利用自動化和指導性測試。
Spring框架對集成測試提供了很好的支持,但是需要大量的手動編碼才能正確設置測試用例。為Spring應用程序構建和維護測試為開發人員帶來了一系列獨特的挑戰,其中包括:
Spring框架必須初始化和配置
該應用程序通常具有第三方庫依賴項(永久存儲,外部服務等)
應用程序通常使用內置的Spring功能來進行會話,安全性,消息傳遞等。對于剛開始使用Spring測試的開發人員來說,設置這些功能可能很棘手。
需要適當配置應用程序依賴項(即Bean)
這些挑戰,加上編寫全面且可維護的測試套件通常要花費大量時間這一事實,導致開發人員編寫的測試不足,從而導致安全漏洞、缺陷、退化和許多麻煩。
Parasoft Jtest單元測試助手可以使生成,改進和維護JUnit測試的過程變得更加輕松和省時,從而為開發人員提供幫助,從而使開發人員可以快速構建良好的測試,并返回他們想要的東西–編寫代碼。
Spring框架包括一個測試框架,該框架使測試控制器、服務和其他組件更加容易。它包括用于配置Spring測試容器,調用Controller處理程序方法以及使用自定義斷言驗證行為的功能。
Spring MVC控制器示例:
@Controller public class TodoController { @Autowired private TodoService service; @GetMapping("/") public String findAll(Model model) { List<Todo> todos = service.findAll(); model.addAttribute("todos", todos); return "todo/list"; } }
該示例控制器實現了一個簡單的REST服務,以從“待辦事項”列表中獲取項目。它取決于包含業務邏輯的TodoService。
要測試findAll方法,我們需要一個JUnit測試,該測試執行以下操作:
使用受測控制器和TodoService依賴的TodoService配置Spring容器。
將有效請求發送到findAll處理程序方法。
驗證響應的元素,包括返回值(“todo/list”)和Model屬性“todos”。
Spring MVC Junit測試示例可能如下所示:
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration public class TodoControllerTest { @Autowired TodoController controller; @Autowired TodoService todoService; MockMvc mockMvc; @Before public void setup() { mockMvc = MockMvcBuilders.standaloneSetup(controller).build(); } @Configuration static class Config { @Bean public TodoController getTodoController() { return new TodoController(); } @Bean public TodoService getTodoService() { return new TodoService(); } } @Test public void testFindAll() throws Exception { mockMvc.perform(get("/")).andExpect(view().name("todo/list")); } }
上面的示例是一個非常簡單的測試-但是仍然有很多“樣板”代碼需要編寫,并且還有很多工作要做。在此示例中,我們使用內部Configuration類為Spring配置了控制器及其服務。然后,我們使用MockMvc函數將請求發送到處理程序方法(使用Perform),并使用andExpect驗證返回的視圖名稱。
上述測試有什么問題?沒什么-想象一個更復雜的控制器方法,它具有多個處理程序方法,這些方法接受更多的參數并產生更多的輸出。編寫測試將花費更多時間,尤其是在良好的測試覆蓋范圍很重要的情況下。此外,大多數實際測試都需要更多的配置(XML或類配置、會話和環境、安全性等)。
Parasoft Jtest的單元測試助手可幫助開發人員以多種方式編寫Spring測試:
快速自動生成樣板代碼以進行Spring MVC測試
自動生成參數化測試以增加測試范圍
模擬依賴關系以隔離輔助方法并簡化測試
在運行時收集覆蓋率數據并分析測試流程
提供快速修復建議以改善測試
自動生成測試
在Parasoft Jtest中生成Spring測試非常簡單–只需在IDE中為控制器選擇一個Spring處理程序方法,然后選擇一個test-creation操作:
選擇常規Spring或參數化Spring會自動為您生成樣板Spring MVC測試,包括Configuration類(以及控制器依賴的所有Bean)。還添加了mockMvc.perform調用,并且將其預先配置為調用為其創建測試的處理程序方法。Jtest單元測試助手甚至添加了一些示例斷言,您可以取消注釋和配置它們。
通過在首選項中設置“Spring測試的ContextConfiguration屬性”選項,Parasoft Jtest支持使用XML或類配置生成測試。
模擬依賴
管理單元測試中的依賴關系至關重要,因為很多復雜性和工作都來自隔離測試中的單元。默認情況下,Jtest單元測試助手使用Mockito或PowerMockito來模擬依賴關系(如果您不想這樣做,可以在首選項中將其禁用)。模擬依賴關系允許測試控制那些依賴關系,將處理程序方法與應用程序的其余部分隔離開來,從而將測試工作集中在處理程序上。在我們的示例處理程序中,findAll方法是在TodoService上調用的-如果我們使用真實的TodoService,我們將有效地測試TodoController和TodoService。這可能是我們想要進行集成測試而不是單元測試所需要的。在測試中模擬TodoService.findAll的響應,使我們可以將測試工作重點放在處理程序方法上。
(如果您想了解有關Spring測試中的模擬依賴項的更多信息,請閱讀我的下一篇文章。)
由于Spring Boot為Bean提供簡化的配置以及測試的附加注釋,因此,單元測試助手在檢測到項目中的Spring Boot時會生成稍有不同的測試。例如,MockMvc是自動裝配的,依賴項使用@MockBean進行了模擬,并使用了@SpringBootTest批注。
您可以使用任何普通的JUnit運行器運行生成的測試。Parasoft Jtest提供了運行JUnit并分析測試的工具欄操作。
運行測試后,將顯示測試執行流程,并由單元測試助手提出改進測試的建議,并在您的IDE中進行報告:
處理程序方法通常被配置為接受路徑,查詢或其他參數作為該方法的參數。若要測試MVC處理程序方法,可以使用MockMvc來構建路徑/查詢以及調用該方法所需的任何其他參數。
Jtest單元測試助手會自動配置mockMvc.perform調用以調用處理程序方法。個別參數在測試中顯示為局部變量(或參數化測試中的參數),需要對其進行配置以使測試正常運行。
例如(請參閱下面的單元測試助手,縮寫為UTA):
@Test public void testGetPerson() throws Throwable { // When String id = ""; // UTA: Configure an appropriate parameter value since the tested method depends on it ResultActions actions = mockMvc.perform(get("/people/" + id));
在這里,需要配置“id”字符串–如果未配置,則使用的路徑將是“/people/”,并且Spring不會將提供的路徑與適當的處理程序方法進行匹配。
class=”p1″>單元測試助手會查找各種類型的處理程序方法參數,并通過以下方式自動為它們準備測試:
HttpSession(添加示例setAttribute()調用)
標頭(添加header()調用),
請求主體(添加有效負載變量和content()調用)
身份驗證(將示例實例化添加到setup方法,并調用principal())
運行不會導致調用處理程序方法的測試,會產生如下建議:
根據處理程序方法應提供給調用者的方式,它可能返回各種類型。在大多數情況下,處理程序方法返回ModelAndView(或類似的對象,如Model或RedirectView)以服務于頁面,或返回某種ResponseEntity(有時只是要序列化的原始對象)。Spring MVC Test框架可以訪問此響應以進行驗證。
例如,Jtest單元測試助手為返回ModelAndView的處理程序方法添加了以下斷言:
// When String id = "1"; ResultActions actions = mockMvc.perform(get("/people/" + id)); // Then // actions.andExpect(status().isOk()); // actions.andExpect(header().string("", "")); // actions.andExpect(view().name("")); // actions.andExpect(model().attribute("", ""));
生成測試后,您可以取消注釋這些斷言并填充值以快速構建有用且有價值的測試。如果斷言在運行時失敗,則單元測試助手會提供建議和快速修復,以自動更新期望值或簡單地刪除斷言。要使用適當的值快速設置斷言,您可以取消注釋斷言,使其失敗,然后使用快速修復程序設置正確的期望值。
Spring(與Spring Boot結合使用)是領先的企業Java應用程序框架,因此需要進行適當級別的測試,以確保使用其構建的應用程序的質量和安全性。但不幸的是,目前尚無法達到此級別的測試,這主要是由于時間不足以及所需的手動編碼和維護量。Parasoft Jtest單元測試助手不僅提供單元測試自動化,還提供指導性的測試創建和依賴管理,以加速測試創建并減少維護。
要了解更多信息,請閱讀單元測試助手如何通過模擬框架幫助進行依賴項管理。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn