spring test組件進行單元測試


1、測試驅動開發(Test Driven Development,TDD),就是我們按照需求寫一個自己預期結果的測試用例,這個測試用例剛開始可能是失敗的測試,隨着不斷的編碼和重構,最終讓測試用例通過測試,這樣才能保證軟件的質量和可控性。

2、測試依賴,包存活在test周期,發布時不包含jar包 。

1 <dependency>
2    <groupId>org.springframework.boot</groupId>
3    <artifactId>spring-boot-starter-test</artifactId>
4    <scope>test</scope>
5 </dependency>

3、spring Test的主要注釋:

(1)@RunWith(SpringRunner.class)使測試運行在spring環境中。

(2)@SpringBootTest代表一個springboot測試。

(3)@AutoConfigureMockMvc代表注入一個MockMvc實例,MockMvc模擬MVC對象。

(4)@WebAppConfiguration用來聲明ApplicationContext將是一個WebApplicationContext。

(5)@Autowired向測試用例中注入實例。

(6)@Test是測試的方法。

(7)@Before在測試開始前進行的初始化工作。

(8)@After在測試方法之后執行的操作方法。

4、service層的測試:

(1)service層測試類上只需添加@RunWith(SpringRunner.class)和@SpringBootTest兩個注解。

(2)使用@Autowired注解注入service對象,當service拋出java.lang.exception時,在測試方法后throws Exception即可。

(3)注意save方法的傳參,比如方法傳參是一個實體entity,可用set方法添加屬性值,實現參數傳遞。若是若干個參數,直接給參數賦值傳入方法中即可。包括id值在內一條記錄的所有參數都要有值。

 

 

5、controller層的測試:

(1)controller層測試類上需添加@RunWith(SpringRunner.class)、@SpringBootTest、@AutoConfigureMockMvc和WebAppConfiguration四個注解。

(2)使用@Autowired注解注入controller對象,當controller拋出java.lang.exception時,在測試方法后throws Exception即可。

(3)首先執行命令MockMvcBuilders.standaloneSetup(qcQpbCinemaTicketController).build()指定測試的控制器。

(4)將需要測試的方法的權限注釋掉,否則org.springframework.web.util.NestedServletException: Request processing failed請求失敗。

(5)controller層測試類的url需要和方法url格式一致。比如,當你測試controller層的List方法,一般url寫到控制器類映射加上方法映射就可以了,但是加了分頁的限制條件后,url需要改為url?page=1&limit=1000&sidx=&order=。

(6)當需要啟動項目獲取某個值作為參數進行傳遞時,測試會報org.springframework.web.util.NestedServletException: Request processing failed.This is an invalid application configuration.因為測試方法獲取不到該值,因此需要注釋掉需要啟動項目獲取該值的命令,再進行測試就可以實現想要測試的效果了。

(7)當測試方法需要傳參時,使用params傳集合參數,但是鍵和值均為字符串類型,如果controller層的方法傳實體類參數,就沒影響。但是傳不同類型的參數,需要將字符串類型轉換為相應的參數類型。

(8)當id值自增時,不改變id值的情況下添加數據id值正常自增。若要改變id值在測試方法傳id參數是行不通的,需要自己在serviceImpl中自定義一個id值,因此比較麻煩。

(9)controller層測試也有自己的局限性。如果controller層的方法需要傳遞實體類參數時,此時測試方法傳集合參數,服務器會報400錯誤。解決方案是在service層進行測試即可。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM