单元测试 @mock与@SpringBootTest的使用

目录
  • 一.单元测试工具mock使用
    • 1.引入依赖包
    • 2.mock测试类
  • 二.springboot使用@SpringBootTest单元测试
    • 1.引入依赖包
    • 2.测试类
  • 三.mock和@springBootTest区别
    • 1.mock进行单元测试不依赖spring的bean定义文件
    • 2.@springBootTest需要启动服务
  • 单元测试--SpringbootTest和MockMvc
    • SpringbootTest
  • MockMvc类的使用和模拟Http请求
    • 相关API:

在写单元测试的过程中我们会发现需要测试的类有很多依赖,这些依赖的类或者资源又会有依赖,导致在单元测试代码里无法完成构建,我们应对的方法是Mock。

简单的说就是模拟这些需要构建的类或者资源,提供给需要测试的对象使用。

一.单元测试工具mock使用

1.引入依赖包

2.mock测试类

二.springboot使用@SpringBootTest单元测试

1.引入依赖包

2.测试类

三.mock和@springBootTest区别

1.mock进行单元测试不依赖spring的bean定义文件

不需要启动web服务,执行起来速度很快。

2.@springBootTest需要启动服务

执行真正的操作,执行速度慢,当需要真正的dao层操作时可选此测试方式。

单元测试--SpringbootTest和MockMvc

SpringbootTest

基于Junit 的Test

import junit.framework.TestCase;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)    //底层用junit的 SpringJUnit4ClassRunner
@SpringBootTest(classes = {XdclassSpringbootApplication.class})
public class XdclassSpringbootApplicationTests {
    @Test
    public void testOne() {
        System.out.println("start test");
        Assert.assertEquals(1,1);
        TestCase.assertEquals(1,2);
    }
}

当然也可以使用 @Before 和 @After , 和 junit 的测试一样。

启动类是必须要有的。

当有多个 @Test 的方法,需要一起执行的时候, 执行 XdclassSpringbootApplicationTests 这个类的 run或debug。

Assert 和 TestCase 都是 断言,用法一样。

MockMvc类的使用和模拟Http请求

相关API:

  • perform:执行一个RequestBuilder请求
  • andExpect:添加ResultMatcher->MockMvcResultMatchers验证规则
  • andReturn:最后返回相应的MvcResult->Response
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
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.MockMvcResultMatchers;
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class MockMvcTestDemo {
    @Autowired
    private MockMvc mockMvc;
    @Test
    public void apiTest(){
        try {
            MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders.get("/hello"))
                    .andExpect(MockMvcResultMatchers.status().isOk())            .andReturn();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Spring Boot 单元测试和集成测试实现详解

    学习如何使用本教程中提供的工具,并在 Spring Boot 环境中编写单元测试和集成测试. 1. 概览 本文中,我们将了解如何编写单元测试并将其集成在 Spring Boot 环境中.你可在网上找到大量关于这个主题的教程,但很难在一个页面中找到你需要的所有信息.我经常注意到初级开发人员混淆了单元测试和集成测试的概念,特别是在谈到 Spring 生态系统时.我将尝试讲清楚不同注解在不同上下文中的用法. 2. 单元测试 vs. 集成测试 维基百科是这么说单元测试的: 在计算机编程中,单元测试是一种

  • SpringBoot 单元测试实战(Mockito,MockBean)

    目录 一个测试方法主要包括三部分 Junit 基本注解介绍 测试方法执行顺序 测试方法命名约定 基于 Spring 的单元测试编写 Mockito 常用的 Mockito 方法 示例 @MockBean 一个测试方法主要包括三部分 1)setup 2)执行操作 3)验证结果 public class CalculatorTest { Calculator mCalculator; @Before // setup public void setup() { mCalculator = new C

  • springboot使用单元测试实战

    前言 springboot提供了 spirng-boot-starter-test 以供开发者使用单元测试,在引入 spring-boot-starter-test 依赖后: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope>

  • SpringBootTest单元测试报错的解决方案

    目录 SpringBootTest单元测试报错 单元测试 @mock和@SpringBootTest使用 一.单元测试工具mock使用 二.springboot使用@SpringBootTest单元测试 三.mock和@springBootTest区别 SpringBootTest单元测试报错 @RunWith(SpringRunner.class) @SpringBootTest(classes = { DataRulesApplication.class }) @EnableAutoConf

  • 基于Springboot+Junit+Mockito做单元测试的示例

    前言 这篇文章介绍如何使用Springboot+Junit+Mockito做单元测试,案例选取撮合交易的一个类来做单元测试. 单元测试前先理解需求 要写出好的单测,必须先理解了需求,只有知道做什么才能知道怎么测.但本文主要讲mockito的用法,无需关注具体需求.所以本节略去具体的需求描述. 隔离外部依赖 Case1. 被测类中被@Autowired 或 @Resource 注解标注的依赖对象,如何控制其返回值 以被测方法 MatchingServiceImpl.java的matching(Ma

  • 单元测试 @mock与@SpringBootTest的使用

    目录 一.单元测试工具mock使用 1.引入依赖包 2.mock测试类 二.springboot使用@SpringBootTest单元测试 1.引入依赖包 2.测试类 三.mock和@springBootTest区别 1.mock进行单元测试不依赖spring的bean定义文件 2.@springBootTest需要启动服务 单元测试--SpringbootTest和MockMvc SpringbootTest MockMvc类的使用和模拟Http请求 相关API: 在写单元测试的过程中我们会发

  • Spring 单元测试中如何进行 mock的实现

    我们在使用 Spring 开发项目时,都会用到依赖注入.如果程序依赖了外部系统或者不可控组件,比如依赖数据库.网络通信.文件系统等,我们在编写单元测试时,并不需要实际对外部系统进行操作,这时就要将被测试代码与外部系统进行解耦,而这种解耦方法就叫作 "mock".所谓 "mock" 就是用一个"假"的服务代替真正的服务. 那我们如何来 mock 服务进行单元测试呢?mock 的方式主要有两种:手动 mock 和利用单元测试框架 mock.其中,利用

  • SpringBoot单元测试使用@Test没有run方法的解决方案

    目录 SpringBoot单元测试使用@Test没有run方法 原因找到了 SpringBoot写单元测试遇到的坑 SpringBoot怎么写单元测试 SpringBoot使用Mockito进行单元测试 通过真实测试用例测试代码 SpringBoot单元测试使用@Test没有run方法 吐了!一个关键字,纠错两小时,看了十几篇博客....最后重新建测试类发现@Test又有用,结果发现是因为默认的Tests测试类没有public关键字! 这个破错改了两小时... ==后续来了:== 原因找到了 建

  • 基于json解析神器 jsonpath的使用说明

    如果项目需求是从某些复杂的json里面取值进行计算,用jsonpath+IK(ik-expression)来处理十分方便,jsonpath用来取json里面的值然后用IK自带的函数进行计算,如果是特殊的计算那就自定义IK方法搞定,配置化很方便. 下面简单介绍下jsonpath的使用方法,主要测试都在JsonPathDemo类里面: 下面是一个简单的java项目demo: 注意: 其中他的max,min,avg,stddev函数只能类似于如下处理: //正确写法 但是感觉很鸡肋 context.r

  • Java测试框架Mockito的简明教程

    什么是 Mock 测试 Mock 测试就是在测试过程中,对于某些不容易构造(如 HttpServletRequest 必须在Servlet 容器中才能构造出来)或者不容易获取比较复杂的对象(如 JDBC 中的ResultSet 对象),用一个虚拟的对象(Mock 对象)来创建以便测试的测试方法. Mock 最大的功能是帮你把单元测试的耦合分解开,如果你的代码对另一个类或者接口有依赖,它能够帮你模拟这些依赖,并帮你验证所调用的依赖的行为. 比如一段代码有这样的依赖: 当我们需要测试A类的时候,如果

  • 详解Spring Boot 配置加载顺序及属性加载顺序

    先给大家介绍下spring boot 配置加载顺序,具体内容如下所示: 使用 Spring Boot 会涉及到各种各样的配置,如开发.测试.线上就至少 3 套配置信息了.Spring Boot 可以轻松的帮助我们使用相同的代码就能使开发.测试.线上环境使用不同的配置. 在 Spring Boot 里面,可以使用以下几种方式来加载配置.本章内容基于 Spring Boot 2.0 进行详解. 1.properties文件: 2.YAML文件: 3.系统环境变量: 4.命令行参数: 等等-- 我们可

  • SpringBoot集成validation校验参数遇到的坑

    公众号中分享了一篇文章,关于SpringBoot集成validation校验参数的,粉丝留言说有坑. 原留言如下: 有坑,你试试^A-\\d{12}-\\d{4}$,这条正则经过validate这个方法无论参数写的对不对都会报验证错误,而用main方法测试是正常的.. 话说,针对这种回复我是不太信了,直觉告诉我,肯定是这位粉丝用错了.但既然粉丝有疑问还是需要专门写一个demo来验证一下的.说写就写. SpringBoot集成validation 集成过程非常简单,在原项目的pom文件中直接引入如

  • 如何使用Mockito调用静态方法和void方法

    一.mock 静态方法 mockito库并不能mock静态方法,需要依赖powermock 第一步:给类添加注解 // 静态类优先加载,所以需要提前告诉powermock哪些静态类需要mock @ContextConfiguration @RunWith(PowerMockRunner.class) @PowerMockRunnerDelegate(SpringJUnit4ClassRunner.class) @PrepareForTest(静态调用类.class) public class S

  • Spring Boot配置内容加密实现敏感信息保护

    在之前的系列教程中,我们已经介绍了非常多关于Spring Boot配置文件中的各种细节用法,比如:参数间的引用.随机数的应用.命令行参数的使用.多环境的配置管理等等. 为什么要加密? 可能很多初学者,对于配置信息的加密并不敏感,因为开始主要接触本地的开发,对于很多安全问题并没有太多的考虑.而现实中,我们的配置文件中,其实包含着大量与安全相关的敏感信息,比如:数据库的账号密码.一些服务的密钥等.这些信息一旦泄露,对于企业的重要数据资产,那是相当危险的. 所以,对于这些配置文件中存在的敏感信息进行加

随机推荐