Spring Boot從Controller層進(jìn)行單元測(cè)試的實(shí)現(xiàn)
單元測(cè)試是程序員對(duì)代碼的自測(cè),一般公司都會(huì)嚴(yán)格要求單元測(cè)試,這是對(duì)自己代碼的負(fù)責(zé),也是對(duì)代碼的敬畏。
一般單元測(cè)試都是測(cè)試Service層,下面我將演示從Controller層進(jìn)行單元測(cè)試。
無參Controller單元測(cè)試示例:
package com.pingan.bloan.genesis.controller.base;
import org.junit.After;
import org.junit.Before;
import org.junit.runner.RunWith;
import com.pingan.bloan.genesis.logwrapper.LogWrapper;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import com.pingan.bloan.genesis.logwrapper.LogWrapperFactory;
import org.springframework.test.context.web.WebAppConfiguration;
@RunWith(SpringRunner.class)
@SpringBootTest
@WebAppConfiguration
public class BaseSpringBootTest {
protected LogWrapper logger = LogWrapperFactory.getLogWrapper(BaseSpringBootTest.class);
@Before
public void init() {
logger.info("開始測(cè)試...");
}
@After
public void after() {
logger.info("測(cè)試結(jié)束...");
}
}
package com.pingan.bloan.genesis.controller;
import org.junit.Test;
import org.junit.Before;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.MvcResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import com.pingan.bloan.genesis.controller.base.BaseSpringBootTest;
import org.springframework.test.web.servlet.result.MockMvcResultHandlers;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
/**
* DemoController測(cè)試
* @author
*
*/
public class DemoControllerTest extends BaseSpringBootTest {
@Autowired
private DemoController demoController;
private MockMvc mockMvc;
@Before
public void setup() {
mockMvc = MockMvcBuilders.standaloneSetup(demoController).build();
}
@Test
public void demo() throws Exception {
MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders.get("/demo/demo"))
.andExpect(MockMvcResultMatchers.status().isOk())
.andDo(MockMvcResultHandlers.print())
.andReturn();
logger.info(mvcResult.getResponse().getContentAsString());
}
}
有參Controller單元測(cè)試示例一:
package com.pingan.bloan.genesis.controller;
import org.junit.Test;
import org.junit.Before;
import org.springframework.http.MediaType;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.MvcResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import com.pingan.bloan.genesis.controller.base.BaseSpringBootTest;
import org.springframework.test.web.servlet.result.MockMvcResultHandlers;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
/**
* 加解密controller測(cè)試
*
* @author
*
*/
public class MessageEncryptionControllerTest extends BaseSpringBootTest {
@Autowired
private MessageEncryptionController messageEncryptionController;
private MockMvc mockMvc;
@Before
public void setup() {
mockMvc = MockMvcBuilders.standaloneSetup(messageEncryptionController).build();
}
/**
* 加密測(cè)試
* @throws Exception
*/
@Test
public void encryption() throws Exception {
MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders.post("/secret/encryption")
.accept(MediaType.APPLICATION_JSON).param("originContent", "15221365094"))
.andExpect(MockMvcResultMatchers.status().isOk())
.andDo(MockMvcResultHandlers.print())
.andReturn();
logger.info(mvcResult.getResponse().getContentAsString());
}
/**
* 解密測(cè)試
* @throws Exception
*/
@Test
public void deciphering() throws Exception {
MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders.post("/secret/deciphering")
.accept(MediaType.APPLICATION_JSON).param("secretContent", "4BD6EE1A13593F97E6CEA20A2BA9E6E4"))
.andExpect(MockMvcResultMatchers.status().isOk())
.andDo(MockMvcResultHandlers.print())
.andReturn();
logger.info(mvcResult.getResponse().getContentAsString());
}
}
有參Controller單元測(cè)試示例二:
package com.pingan.bloan.genesis.controller;
import org.junit.Test;
import org.junit.Before;
import com.alibaba.fastjson.JSONObject;
import org.springframework.http.MediaType;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.MvcResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import com.pingan.bloan.genesis.controller.base.BaseSpringBootTest;
import org.springframework.test.web.servlet.result.MockMvcResultHandlers;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import com.pingan.bloan.genesis.model.mobiletelephone.MobileTelephoneRequest;
/**
* 客戶手機(jī)掩碼信息加密處理測(cè)試
* @author
*
*/
public class MobileTelephoneIdempotentControllerTest extends BaseSpringBootTest {
@Autowired
private MobileTelephoneIdempotentController mobileTelephoneIdempotentController;
private MockMvc mockMvc;
@Before
public void setup() {
mockMvc = MockMvcBuilders.standaloneSetup(mobileTelephoneIdempotentController).build();
}
/**
* 保存加密處理的客戶信息
* @throws Exception
*/
@Test
public void saveCustomerEncryptionMessage() throws Exception {
MobileTelephoneRequest request = new MobileTelephoneRequest();
request.setCustomerId("RL20180304000099");
request.setMobileTelephone("18883270484");
request.setCcfMobileTelephone("13904108866");
MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders.post("/customerEncryption/save")
.contentType(MediaType.APPLICATION_JSON)
.content(JSONObject.toJSONString(request)))
.andExpect(MockMvcResultMatchers.status().isOk())
.andDo(MockMvcResultHandlers.print())
.andReturn();
logger.info(mvcResult.getResponse().getContentAsString());
}
}
Suite一次性執(zhí)行多個(gè)單元測(cè)試:
package com.pingan.bloan.genesis.controller;
import org.junit.runners.Suite;
import org.junit.runner.RunWith;
/**
* 打包測(cè)試
* 配置測(cè)試類,一次性執(zhí)行所有配置的測(cè)試類
* @author
*
*/
@RunWith(Suite.class)
@Suite.SuiteClasses({MessageEncryptionControllerTest.class, DemoControllerTest.class})
public class SuiteExecuteTests {
// 不用寫代碼,只需要注解即可(在SuiteClasses中配置測(cè)試類)
}
代碼單元測(cè)試,讓代碼更加健壯。
到此這篇關(guān)于Spring Boot從Controller層進(jìn)行單元測(cè)試的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Spring Boot Controller單元測(cè)試內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
教你快速搭建sona服務(wù)及idea使用sona的方法
Sonar 是一個(gè)用于代碼質(zhì)量管理的開放平臺(tái)。通過插件機(jī)制,Sonar 可以集成不同的測(cè)試工具,代碼分析工具,以及持續(xù)集成工具,本文給大家分享搭建sona服務(wù)及idea使用sona的方法,感興趣的朋友一起看看吧2021-06-06
詳解Spring Cloud Zuul 服務(wù)網(wǎng)關(guān)
本篇文章主要介紹了詳解Spring Cloud Zuul 服務(wù)網(wǎng)關(guān),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-12-12
Java中super關(guān)鍵字介紹以及super()的使用
這幾天看到類在繼承時(shí)會(huì)用到this和super,這里就做了一點(diǎn)總結(jié),下面這篇文章主要給大家介紹了關(guān)于Java中super關(guān)鍵字介紹以及super()使用的相關(guān)資料,需要的朋友可以參考下2022-01-01
Mybatis控制臺(tái)打印SQL語句的兩種實(shí)現(xiàn)方式
在使用Mybatis開發(fā)時(shí),由于可以動(dòng)態(tài)拼接SQL,當(dāng)動(dòng)態(tài)SQL拼接塊過多,直接從*mapper.xml中找出完整的SQL較難,此時(shí),可以通過兩種方法調(diào)試出SQL,方法一,將ibatislog4j運(yùn)行級(jí)別調(diào)到DEBUG,在控制臺(tái)打印出ibatis運(yùn)行的SQL語句2024-10-10
Spring Boot Admin的使用詳解(Actuator監(jiān)控接口)
這篇文章主要介紹了Spring Boot Admin的使用詳解(Actuator監(jiān)控接口),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-05-05
JavaWeb 簡(jiǎn)單分頁實(shí)現(xiàn)代碼
這篇文章主要介紹了JavaWeb 簡(jiǎn)單分頁實(shí)現(xiàn)代碼的相關(guān)資料,需要的朋友可以參考下2016-11-11

