当前位置: 首页 > news >正文

麻城建设局网站停办权威发布

麻城建设局网站停办,权威发布,网站开发需要单独服务器吗,网站建设 b2b文章目录 基础基础概念Mockxxx一般实现文件位置 实战MockMvc与Test注解不兼容RequestParams参数RequestBody参数 基础 基础概念 定义:是Spring框架提供的一种用于测试Spring MVC控制器的工具,它允许开发者在不启动完整的web服务器的情况下,…

文章目录

  • 基础
    • 基础概念
    • Mockxxx
    • 一般实现
    • 文件位置
  • 实战
    • MockMvc与Test注解不兼容
    • @RequestParams参数
    • @RequestBody参数

基础

基础概念

定义:是Spring框架提供的一种用于测试Spring MVC控制器的工具,它允许开发者在不启动完整的web服务器的情况下,模拟HTTP请求并验证响应。优点:执行速度快 --》 不需要启动web服务器;便于集成 --》 可以与JunitTestNG等测试框架无缝衔接;强大的功能 --》  对HTTP请求的详细配置和响应的全面验证;依赖配置:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope>
</dependency>

Mockxxx

MockMvc:来自于:import org.springframework.test.web.servlet.MockMvc;定义:是Spring Test模块的一部分,它允许开发者对Spring MVC控制器进行单元测试而无需启动完整的Web服务器;通过MockMvc,可以模拟HTTP请求并验证响应,使得测试执行速度更快,同时便于与JUnitTestNG等测试框架集成。使用:使用mockMvc。perform()模拟HTTP请求,使用.andExpect().andReturn()等方法进行响应验证。
Mockito:来自于:import org.mockito.Mockito;定义:流行的Java单元测试框架,专门用于创建和验证模拟对象的行为。它允许开发者在编写测试时模拟外部依赖,从而使得测试更便捷,减少对外部类、系统和依赖给单元测试带来的耦合。特点:行为验证、测试桩、参数匹配器、注册支持、监控真实对象、重置mock对象;
MvcResult:来自于:import org.springframework.test.web.servlet.MvcResult;定义:是在执行模拟HTTP请求以测试控制器(Controller)层功能时的重要概念,它代表一个完整的HTTP响应结果,包括响应的状态码、头信息、响应体以及任何可能产生的错误等。作用:封装HTTP响应 -》封装由模拟的HTTP产生的完整响应信息;获取响应细节 -》包括响应的状态码、头信息、响应体等内容;断言测试 -》 使用MvcResult中的方法进行断言,确保控制器返回正确的HTTP状态码和数据;

一般实现

// 类注解,用于配置 JUnit 5 测试类以使用 Spring 的测试支持。
@ExtendWith(SpringExtension.class)// 是一个 Spring Boot 提供的注解,用于对 Web 层(即控制器层)进行测试。如果使用该注解,那么Spring Boot 会自动配置一个模拟的 Spring MVC 环境,这样就可以在不启动完整应用的情况下测试控制器的行为。
@WebMvcTest(value = {Controller.class, Handler.class})// 完成bean自动装配
@Autowired
private MockMvc mockMvc;// 标识测试方法
@Test
MockHttpServletRequestBuilder requestBuilder = get("控制类路径/xxx/xxx");
// MockHttpServletRequestBuilder 是一个用于构建模拟HTTP请求的工具类。
// 主要在单元测试和集成测试中使用,构造出特定的HTTP请求来测试控制器(Controller)或端点(Endpoint)。
requestBuilder.param("参数名", 参数值);
// 给已创建的mockhttpservletrequestbuilder实例添加查询参数; 
// 将参数通过键值对的形式填入MockHttpServletRequestBuilder对象中;mockMvc.perform(requestBuilder) // mockMvc对象执行,之前定义的requestbuiler对象.andExpect(status().isOk()) // 该调用方式是链式调用;--》 用于检查HTTP响应的状态码是否是200.andDo(new ResultHandler() { // 自定义处理MvcResult对象,即模拟请求后的结果@Overridepublic void handle(MvcResult mvcResult) throws Exception {// 获取响应体并将其转化为字符串类型;String content = mvcResult.getResponse().getContentAsString();// 检查响应体是否为空,以确保有数据返回;assertTrue(StringUtils.isNotBlank(content));// 将响应体内容解析成map集合Map<String, String> resp = JSONUtils.toMap(content);// 验证code/message 两个属性的值是否等于1/success;assertEquals("1", resp.get("code"));assertEquals("success", resp.get("message"));// 获取data属性对应的值String data = resp.get("data");// base64解码byte[] encryptedData = Base64.decode(data);// aes密钥生成AES aes = genAES(keyIv);// 解密data对应的值String json = new String(aes.decrypt(encryptedData), StandardCharsets.UTF_8);// json format is ResponseKeyCollection 自定义的一个类ResponseKeyCollection collection = JSONUtils.toObject(json, ResponseKeyCollection.class);// 将json转成 ResponseKeyCollection对象assertEquals(10, collection.getResponseKeys().size());// 验证对象中getResponseKeys方法返回的集合大小是否为10}});@BeforeEach
ResponseKey responseKey1 = COLLECTION.getResponseKeys().stream().filter(key -> key.getIndex() == 1).findFirst().orElse(null);
// COLLECTION获取ResponseKeys属性--》转换为流--》过滤出index=1的responseKey对象
// --》查找第一个满足条件的--》有则返回,无则返回null;
// COLLECTION 是自定义的对象
Mockito.when(keyStoreService.getResponseKey(1)).thenReturn(responseKey1);
// 模拟该方法,当此入参为1时,则返回上述找到的对象;
Mockito.when(keyStoreService.generateResponseKeyCollection(10)).thenReturn(COLLECTION);
// 模拟该方法,当此入参为10时,则返回Collecion对象;
Mockito.when(keyHelper.isExpiredKeyIndex(anyInt())).thenReturn(false);
// 模拟此方法,不管该方法入参为谁,都返回false --》 即keyIndex永不过期

文件位置

与项目目录保持一致;
假设项目文件为src/main/java/xxx/controller/xxxController
测试类项目文件为src/test/java/xxx/controller/xxxTest

实战

MockMvc与Test注解不兼容

参考博客:https://segmentfault.com/q/1010000042943340

描述:使用    @Autowiredprivate MockMvc mockMvc;总是导致注入的mockMvc失败;
原因是:MockMvc@Test不兼容的问题;原本依赖库为:org.junit.Test 改成org.junit.jupiter.api.Test 就可以了;两个依赖库之间的关系为:org.junit.Test --JUnit4 org.junit.jupiter.api.Test --JUnit5

@RequestParams参数

MockHttpServletRequestBuilder requestBuilder = get("/decrypt");
requestBuilder.param("id1", id1);
requestBuilder.param("id2", id2);
mockMvc.perform(requestBuilder).andExpect(status().isOk()).andDo(mvcResult -> {String content = mvcResult.getResponse().getContentAsString();
});

@RequestBody参数

接口请求参数:
@RequestMapping("/getfunction1")
public ResultDtoRisk riskGetTokenByph(HttpServletRequest request, @RequestBody NumReq numReq){}测试代码:
@Autowired
pivate MockMvc mockMvc;
// import org.springframework.test.web.servlet.MockMvc;NumReq numReq = new NumReq();
numReq.setId1(id1);
numReq.setId2(id2);MockHttpServletRequestBuilder requestBuilder = get("/getfunction1");
// import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder;
String requestBodyContent = objectMapper.writeValueAsString(numReq);requestBuilder.contentType(MediaType.APPLICATION_JSON_VALUE).content(requestBodyContent);mockMvc.perform(requestBuilder).andExpect(status().isOk()).andDo(print());
http://www.hkea.cn/news/311314/

相关文章:

  • 网站客户端怎么做的百度一下了你就知道官网
  • 有什么推广方法优化大师电脑版官方
  • 自己做网站的服务器上海网站建设公司排名
  • 跳蛋塞逼做多的视频网站百度广告联盟官网
  • 房地产网站开发文档企业查询
  • 做emu对网站有什么要求十大免费无代码开发软件
  • 扬州专业做网站做关键词优化
  • 宿州网站建设贰聚思诚信网站服务器
  • 用照片做模板下载网站好百度爱采购官方网站
  • 微网站建设套餐网络营销是做什么的
  • 徐州有哪些做网站苏州网站建设费用
  • 统一企业信息管理系统网站直通车怎么开效果最佳
  • 武汉外贸网站建设公司外链相册
  • java做网站的权限管理seo描述是什么
  • 招聘网最新招聘信息网武汉seo计费管理
  • 直播软件开发源码重庆seo顾问
  • 公司网站如何做宣传百度视频推广怎么收费
  • 淄博市 网站建设报价郑州seo外包阿亮
  • 网络服务商是指什么网站优化排名工具
  • 网站优化的分析比较好的品牌策划公司有哪些
  • 国外比较好的资源网站电商运营推广是做什么的
  • 佛山房地产网站建设seo实战培训王乃用
  • 如何做可以赚钱的网站关键词如何快速排名
  • 深圳品牌做网站公司有哪些百度app推广
  • 重庆建设行业信息网站搜狗登录入口
  • 同仁行业网站建设报价北京做的好的seo公司
  • 陕西自助建站做网站郑州外语网站建站优化
  • 小型企业网站系统cilimao磁力猫最新版地址
  • 铁岭网站建设移动网站广东网站seo
  • 网站模板插件sem和seo