IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> java基础之单元测试 -> 正文阅读

[开发测试]java基础之单元测试

准备工作

springboot使用单元测试需要先引入以下依赖

  <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
  </dependency>

test依赖会引入如下的jar包请添加图片描述
请添加图片描述

service单元测试

springboot中单元测试类写在src/test/java目录下,可以进行手动创建测试类,或者通过idea自动创建测试类ctrl+shift+T(shift+command+T)或者菜单栏鼠标点击创建:
请添加图片描述

上面就是最简单的单元测试写法,想要执行的时候,鼠标放在对应的方法,右键选择run该方法即可。

controller单元测试

对controller进行单元测试时,需要使用到MockMvc了。这样就可以不必启动项目就可以测试这些接口了。
MockMvc实现了对Http请求的模拟,能够直接使用网络的形式,转换到Controller的调用,这样可以使得测试速度快、不依赖网络环境,而且提供了一套验证的工具,这样可以使得请求的验证统一而且很方便。
示例代码如下:

package com.test.danyuanceshi.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * 单元测试联系示例使用到的controller
 */
@RestController
public class DanYuanCeShiController {

    @GetMapping("/get/not/param")
    public String testDanYanControllerNotParam(){
        return "没有请求参数的单元测试get方法";
    }

}
package com.test.danyuanceshi.controller;


import org.junit.Assert;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.MediaType;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.MvcResult;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.result.MockMvcResultHandlers;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;

@SpringBootTest
@RunWith(SpringRunner.class)
public class DanYuanCeShiControllerTest {

    @Autowired
    private WebApplicationContext webApplicationContext;

    private MockMvc mockMvc;

    @Before
    public void setUp() throws Exception{
        //初始化mockMvc对象
        //指定webApplicationContext上下文,将会从这个上下文获取对应的控制器并得到相应的mockMvc
        System.out.println("----初始化mockMvc-----");
        mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
        System.out.println("----mockMvc执行完毕------");
    }

    @Before
    public void before() {
        System.out.println("@Before");
    }

    @Test
    public void testDanYanControllerNotParam() throws Exception {
        MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders.get("/get/not/param")
                .accept(MediaType.TEXT_HTML_VALUE)
                        .contentType(MediaType.APPLICATION_JSON_UTF8))
                .andDo(MockMvcResultHandlers.print())
                .andReturn();
        int status = mvcResult.getResponse().getStatus();
        String content = mvcResult.getResponse().getContentAsString();
        Assert.assertEquals(200, status);
//        Assert.assertEquals("nice", content);
        System.out.println("测试before");
    }


    /*@BeforeClass
    public static void beforeClass() {
        System.out.println("BeforeClass");
    };*/
}

SpringBoot引入MockMvc

  1. 什么是Mock?
    在面向对象的程序设计中,模拟对象(mock object)是以可控的方式模拟真实对象行为的假对象。在编程过程中,通常通过模拟一些输入数据,来验证程序是否达到预期结果。
  2. 为什么使用Mock对象
    使用模拟对象,可以模拟复杂的、真实的对象行为。如果在单元测试中无法使用真实对象,可采用模拟对象进行替代。
  3. MockMvc的概念
    MockMvc是由spring-test包提供,实现了对http请求的模拟,能够直接使用网络的形式,转换到Controller的调用,使得测试速度快、不依赖网络环境。同时提供了一套验证的工具,结果的验证十分方便。
    接口MockMvcBuilder,提供一个唯一的build方法,用来构造MockMvc。主要有两个实现StandaloneMockMvcBuilder和DefaultMockMvcBuilder。
  4. MockMvc的基本步骤
    (1)mockMvc.perform执行一个请求
    (2)MockMvcRequestBuilders.get(“xxx”)构造一个请求
    (3)ResultActions.param添加请求传值
    (4)ResultActions.accept()设置返回类型
    (5)ResultActions.addExpect添加执行完成后的断言
    (6)ResultActions.andDo添加一个结果处理器,表示要对结果做的事情,例如使用print()输出相应信息
    (7)ResultActions.andReturn 表示执行完成后返回相应的结果

注解解释

  1. @SpringBootTest:获取启动类,加载配置,寻找主配置启动类(@SpringBootApplication注解的)
  2. @RunWith(SpringRunner.class):让JUnit运行Spring的测试环境,获取Spring环境的上下文支持
  3. @AutoConfigureMockMvc:用于自动配置MockMvc,配置后MockMvc类可以直接注入,相当于new MockMvc
  4. @Before:初始化方法,对于每一个测试方法都要执行一次。
    断言的概念
  5. 断言(assert),编程术语,表示为一些布尔表达式,在程序中的某个特定点该表达式值为真。可以在任何时候启用或者禁用断言验证。因此可以在测试时启用断言而在部署的时候禁用断言
  6. 断言用来判断一个函数或者对象的一个方法所产生的结果是否符合期望的值

assertThat使用

JUnit 4.4 结合 Hamcrest 提供了一个全新的断言语法——assertThat。可以只使用 assertThat 一个断言语句,结合 Hamcrest 提供的匹配符,就可以表达全部的测试思想。
assertThat的优点:

  1. 以前 JUnit 提供了很多的 assertion 语句,如:assertEquals,assertNotSame,assertFalse,assertTrue,assertNotNull,assertNull 等,现在有了 JUnit 4.4,一条 assertThat 即可以替代所有的 assertion 语句,这样可以在所有的单元测试中只使用一个断言方法,使得编写测试用例变得简单,代码风格变得统一,测试代码也更容易维护。
  2. assertThat 使用了 Hamcrest 的 Matcher 匹配符,用户可以使用匹配符规定的匹配准则精确的指定一些想设定满足的条件,具有很强的易读性,而且使用起来更加灵活。
  3. assertThat 不再像 assertEquals 那样,使用比较难懂的“谓宾主”语法模式(如:assertEquals(3, x);),相反,assertThat 使用了类似于“主谓宾”的易读语法模式(如:assertThat(x,is(3));),使得代码更加直观、易读。

基本语法:
assertThat( [value], [matcher statement] );
value :接下来想要测试的变量值; matcher statement :使用 Hamcrest 匹配符来表达的对前面变量所期望的值的声明,如果 value 值与 matcher statement 所表达的期望值相符,则测试成功,否则测试失败。

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2022-04-06 16:20:21  更:2022-04-06 16:21:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/18 1:29:38-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码