日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

java单元测试启动类配置_Springboot 单元测试简单介绍和启动所有测试类的方法

發布時間:2023/11/27 生活经验 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java单元测试启动类配置_Springboot 单元测试简单介绍和启动所有测试类的方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近一段時間都是在補之前的技術債,一直忙著寫業務代碼沒有注重代碼的質量,leader也在強求,所有要把單元測試搞起來了

我把單元測試分為兩種 一個是service的單元測試,一個是controller層的單元測試接;

單元測試肯定要引入單元測試包maven依賴

org.junit.jupiter

junit-jupiter-api

RELEASE

opentest4j

org.opentest4j

org.springframework.boot

spring-boot-starter-test

test

在介紹兩個單元測試之前說一說我們一般寫單元測試是不是這樣的

比如只了解service單元測試而且測試代碼是這樣的

@RunWith(SpringRunner.class)

@SpringBootTest(classes= {NpmcsApplication.class})public classResourceServiceTest {

@AutowiredprivateResourceService resourceService;

@Testpublic voidcountTotal() {

Map map = resourceService.countTotal("2019-10-21", "2019-10-25");

System.out.printl(map);

}

}

都是傳入條件直接輸出當然并不能說這種不能達到測試的效果,但是我們是追求完美的coder要追求性能和代碼的美觀 System.out是分非常的消耗性能的,既然是單元測試肯定要有斷言,這個應該都聽過

測試包下面有斷言的方法提供了很多

這里有很多的斷言方法比如上面的代代碼可以修改為

@RunWith(SpringRunner.class)

@SpringBootTest(classes= {NpmcsApplication.class})public classResourceServiceTest {

@AutowiredprivateResourceService resourceService;

@Testpublic voidcountTotal() {

Map map = resourceService.countTotal("2019-10-21", "2019-10-25");

Assert.assertNotNull(map);

}

}

上面代碼重點是, 測試類加@RunWith注解, 還有加上 @SpringBootTest(classes = App.class) 注解, 這里的 App.class 是主程序java類. 主程序java程序必須是SpringBootApplication程序, 否則測試用例會報如下錯誤:

Unable to find a @SpringBootConfiguration, you need to use @ContextConfiguration or @SpringBootTest(classes=...) with your test java.lang.IllegalStateException.

@RunWith是JUnit的一個注解, 用來告訴JUnit不要使用內置的方式進行單元測試, 而應該使用指定的類做單元測試 對于Spring單元測試總是要使用 SpringRunner.class .

@SpringBootTest 用來指定SpringBoot應用程序的入口類, 該注解默認會根據包名逐級往上找, 一直找到一個SpringBoot主程序class為止, 然后啟動該類為單元測試準備Spring上下文環境. ?Spring單元測試并不在每個測試方法前都移動一個全新的Spring上下文, 因為這樣做太耗費時間, 而是會緩存上下文環境. 如果某個測試方法需要重新準備Spring上下文, 需要在該方法上加 @DirtiesContext 注解.

@Test注解: JUnit在執行每個測試方法之前, 都會為測試類創建一個新的實例, 這樣有助于隔離各個測試方法之前的相互影響.

接下來說一下controller測試這個有點復雜用到的MockMvc,針對API測試的一個庫

話不多說直接剛代碼

@RunWith(SpringJUnit4ClassRunner.class)

@SpringBootTestpublic classPressureViewContorllerTest {

@AutowiredprivateWebApplicationContext context;privateMockMvc mockMvc;privateMockHttpSession session;

@Beforepublic voidbefore() throws Exception {

mockMvc= MockMvcBuilders.webAppContextSetup(this.context).build();

session= newMockHttpSession();

User user= newUser();

user.setName("小明");

session.setAttribute("user", user);

}

@Afterpublic voidafter() throws Exception {

}/**

* Method: showPressure()*/@Testpublic voidtestShowPressure() throws Exception {

String json= "{\n" + "\t\"startDate\": \"2019-09-14\",\n" + "\t\"endDate\": \"2019-10-14\"\n" + "}";

MultiValueMap params = new LinkedMultiValueMap();params.add("startDate", "2019-09-14");params.add("endDate", "2019-10-14");

RequestBuilder request=MockMvcRequestBuilders.post("/pressure/pressureView").contentType(MediaType.APPLICATION_JSON)

.params(params);

MvcResult mvcResult=mockMvc.perform(request).andExpect(MockMvcResultMatchers.status().isOk()).andDo(

MockMvcResultHandlers.print()).andReturn();int status =mvcResult.getResponse().getStatus();

String content=mvcResult.getResponse().getContentAsString();

Assert.assertTrue("正確", status == 200);

Assert.assertFalse("錯誤", status != 200);

}/**

* Method: pressureList()*/@Testpublic voidtestPressureList() throws Exception {

MultiValueMap params = new LinkedMultiValueMap();params.add("startDate", "2019-09-14");params.add("endDate", "2019-10-14");

RequestBuilder request=MockMvcRequestBuilders.post("/pressure/list").contentType(MediaType.APPLICATION_JSON_UTF8)

.params(params);

MvcResult mvcResult=mockMvc.perform(request).andExpect(MockMvcResultMatchers.status().isOk()).andDo(

MockMvcResultHandlers.print()).andReturn();int status =mvcResult.getResponse().getStatus();

String content=mvcResult.getResponse().getContentAsString();

Assert.assertTrue("正確", status == 200);

Assert.assertFalse("錯誤", status != 200);

}

}

代代碼講解:

首先要注入MockMvc? ,MockHttpSession ,WebApplicationContext? 初始化這些對象@Before這個方法是在每個Test方法之前執行,模擬登錄因為登錄攔截檢測是否有session信息

mockMvc.perform() 模仿頁面調用接口?MockMvcRequestBuilders.post("/pressure/list") 這個是掉POST方法 GET直接.get(url)

MultiValueMap params = new LinkedMultiValueMap();

params.add("startDate", "2019-09-14");

params.add("endDate", "2019-10-14");

這個是模擬參數 使用的是 MockMvcRequestBuilders.post("/pressure/list").contentType(MediaType.APPLICATION_JSON_UTF8).params(params);

也可以使用

mvc.perform(MockMvcRequestBuilders.get("/manPower/countManPowerByTeam").param("startDate","2019-01-01").param("endDate","2019-12-31")).andExpect(MockMvcResultMatchers.status().isOk()).andDo(MockMvcResultHandlers.print()).andReturn();

這段代碼:

mockMvc.perform(request).andExpect(MockMvcResultMatchers.status().isOk()).andDo(

MockMvcResultHandlers.print()).andReturn();

期望返回status是ok 并且打印放回的結果

最后附上啟動所有的測試類方法使用的是TestSuite

/**

* 啟動所有的測試類

* @Author zly

* @Date 2018/11/2 09:54*/@RunWith(Suite.class)

@Suite.SuiteClasses({TeamServiceTest.class,

PressureViewContorllerTest.class,

UserControllerTest.class,

FlowViewControllerTest.class,

HttpConnUtilTest.class, DemandPICControllerTest.class, DemandProtraitServiceTest.class})public class TestSuite {

就是把所有的測試類注入進來

有寫的不好之處希望各路大佬指教 共同成長

總結

以上是生活随笔為你收集整理的java单元测试启动类配置_Springboot 单元测试简单介绍和启动所有测试类的方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。