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層進行測試即可。