首页 > 其他分享 >单元测试示例

单元测试示例

时间:2024-08-06 09:05:43浏览次数:14  
标签:示例 Mockito 单元测试 testEx springframework import org innerService

环境准备

   <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <spring-boot.version>2.3.4.RELEASE</spring-boot.version>
    </properties><dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

代码示例

package com.java.learn;

import com.java.learn.mockito.InnerService;
import com.java.learn.mockito.ServiceA;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
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.boot.test.mock.mockito.MockBean;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThrows;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

@SpringBootTest()
@RunWith(SpringRunner.class)
@AutoConfigureMockMvc
public class MockitoTest {

    @Before
    public void beforeMethod() {
        MockitoAnnotations.initMocks(this);
        System.out.println("beforeMethod");
    }

    @After
    public void afterMethod() {
        System.out.println("afterMethod");
    }

    @Autowired
    private ServiceA serviceA;
    @Autowired
    @MockBean
    private InnerService innerService;

    /**
     * 使用Mockito框架测试mock bean的功能
     * 该测试方法主要用于验证serviceA中调用mock的innerService时的行为是否符合预期
     */
    @Test
    public void tesMockBean() {
        // 设置当调用innerService的testEx方法时,不论传入什么参数,都返回"hello mockito"
        Mockito.when(innerService.testEx(Mockito.any())).thenReturn("hello mockito");
        Mockito.when(innerService.testEx(Mockito.any())).thenAnswer(iv -> "hello mockito1");
        // 调用serviceA的testMocK方法,预期返回值为"hello mockito"
        String s = serviceA.testMocK();
        // 验证testEx方法是否被正确调用了两次,以确保mock行为符合预期
        //Mockito.verify(innerService, Mockito.times(2)).testEx(Mockito.any());
        // 断言实际返回值与预期值是否相等
        assertEquals("hello mockito1", s);
    }

    /**
     * 测试当内部服务抛出异常时的处理
     * 该测试方法旨在验证当innerService的testEx方法抛出异常时,是否正确地被测试代码捕获并处理
     * 使用Mockito框架来模拟innerService的行为,并定义当调用testEx方法时(无论参数是什么),都将抛出Exception
     * 然后,测试通过assertThrows方法验证,调用innerService的testEx方法时是否会抛出RuntimeException
     */
    @Test
    public void testException() {
        // 使用Mockito框架设置当调用innerService的testEx方法时抛出Exception
        Mockito.when(innerService.testEx(Mockito.any())).thenThrow(Exception.class);

        // 验证调用testEx方法时是否会抛出RuntimeException
        assertThrows(RuntimeException.class, () -> {
            innerService.testEx("");
        });
    }


    @Autowired
    private MockMvc mockMvc;

    /**
     * 测试MockMvc的功能
     * 该测试方法用于验证通过MockMvc发起的GET请求是否能正确接收并返回预期的响应
     * 主要用于确保控制器层的接口按预期工作,对于测试Web应用的连通性和基本功能非常有用
     *
     * @throws Exception 如果在模拟请求过程中发生错误,则可能抛出此异常
     */
    @Test
    public void tesMockMvc() throws Exception {
        mockMvc.perform(get("/ping"))
                .andExpect(status().isOk())
                .andExpect(content().string("hello mockMvc"));
    }

}

标签:示例,Mockito,单元测试,testEx,springframework,import,org,innerService
From: https://www.cnblogs.com/BitX/p/18344444

相关文章

  • vue3+ts公司人员管理系统示例(接口版)
    vue3+ts公司人员管理系统示例(接口版)首先,让我们创建一个新的Vue3项目:vuecreatecompany-management-systemcdcompany-management-systemvueaddtypescriptnpminstallelement-plusaxios然后,我们来创建必要的文件和组件:在src/types目录下创建Employee.ts:/......
  • 常见的PID的算法及代码示例
    常见的PID的算法及代码示例PID(比例-积分-微分)算法是控制系统中常用的一种反馈控制算法,它通过计算误差的比例、积分和微分来调整控制输入,以达到预定的控制目标。以下是一些常见的PID算法及代码示例:一、常见的PID算法位置式PID算法位置式PID算法直接计算控制量的绝对值,每次输......
  • emsdk安装和编译2个C++基础示例
    参考地址:Downloadandinstall—Emscripten3.1.65-git(dev)documentation 环境:ubuntu24.04LTSgcc(Ubuntu13.2.0-23ubuntu4)13.2.0g++(Ubuntu13.2.0-23ubuntu4)13.2.0cmakeversion3.28.3 Firstcheckthe Platform-specificnotes belowandinstallan......
  • v-md-editor示例
    pnpmcreatefarm@latest#选择vue3cdprojectpnpmi@kangc/v-md-editor@next修改index.ts:import{createApp}from'vue';//import'./style.css';importAppfrom'./App.vue';importVueMarkdownEditorfrom'@kangc/v-md-ed......
  • Kotlin 布尔值教程:深入理解与应用示例
    Kotlin布尔值在编程中,您经常需要一种只能有两个值的数据类型,例如:是/否开/关真/假为此,Kotlin有一种布尔数据类型,可以取true或false值。布尔值布尔类型可以用Boolean关键字声明,并且只能取true或false值:示例valisKotlinFun:Boolean=truevalisFish......
  • vue2 - 最新详细实现高德地图绘制动态热力图详细教程,在某区域或城市地图上做“热力图
    效果图在vue2、nuxt2项目开发中,详解引入使用高德地图接收热力图数据并渲染“热力图”效果功能,在地图上的某个区域或某个城市(可多个)、省份等自由绘制对应的热力图层,各城市地区同时加载渲染热力流量区域用以对比,根据不同的颜色代表人口密度、客流量、旅游人数、交通流量......
  • Kotlin 布尔值教程:深入理解与应用示例
    Kotlin布尔值在编程中,您经常需要一种只能有两个值的数据类型,例如:是/否开/关真/假为此,Kotlin有一种布尔数据类型,可以取true或false值。布尔值布尔类型可以用Boolean关键字声明,并且只能取true或false值:示例valisKotlinFun:Boolean=truevalisFi......
  • Optional源码解析和示例解析
    Optional源码解析packagejava.util;importjava.util.function.Consumer;importjava.util.function.Function;importjava.util.function.Predicate;importjava.util.function.Supplier;/***这是一个容器对象,它可能包含一个非空值,也可能不包含。*如果这个......
  • 【机器学习】正则化的基本概念以及正则化成本和梯度的示例
    引言在机器学习中,正则化(Regularization)是一种技术,用于减少模型复杂度,防止过拟合,并提高模型的泛化能力。通过在损失函数中添加一个额外的惩罚项,正则化鼓励模型学习更简单、更平滑的函数,从而在未见过的数据上表现得更好文章目录引言一、正则化1.1正则化的形式1.1.1L1......
  • 如何写出高质量ChatGPT指令?195条Prompt示例-第二弹
    第一弹链接:如何写出高质量ChatGPT指令?195条Prompt示例-CSDN博客点点关注,对催更第三弹更有用哦!3.明确说明所需的主题或任务明确提及你希望ChatGPT解决的任务或主题。这有助于集中响应,避免偏差或模糊的输出。不要像“谈论营销策略”这样笼统的提示,而要具体。例如,“为小企业......