SpringBoot单元测试断言 assertions

news2024/12/26 23:16:46

断言

断言(assertions)是测试方法中的核心部分,用来对测试需要满足的条件进行验证。这些断言方法都是 org.junit.jupiter.api.Assertions 的静态方法。JUnit 5 内置的断言可以分成如下几个类别:

1、简单断言

在这里插入图片描述

2、数组断言

通过 assertArrayEquals 方法来判断两个对象或原始类型的数组是否相等

配置类中

也可以设置异常报文,第一个参数是期望值,第二个参数是实际值

@Test
@DisplayName("数组断言测试")
void testArrayAssertions(){
    Assertions.assertArrayEquals(new int[]{1,2},new int[]{1,2},"元素不一样");
}

详细步骤:

Spring boot目录结构一般是固定的:
在这里插入图片描述
选中要测试的方法体右键:
在这里插入图片描述
会弹出新建测试类的框
在这里插入图片描述
上面一个是我测试建的,如果要新建应该选第二个:Create New Test…
在这里插入图片描述
上面是生成测试类的名称以及测试的一些属性,下面是选择你要放入的待测试的模块:

下面开始上代码:

Spring boot自带的测试基类(启动配置):

package com.ai.rai.group.workflow.application;
 
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
 
/**
 * Project:bean_generator
 * Author:hangke
 * Date:2017/1/13
 * Description://TODO add description here
 */
@RunWith(SpringRunner.class)
@SpringBootTest(classes = TestApplication.class)
public class BaseTestApplication
{
    protected Logger logger = LoggerFactory.getLogger(this.getClass());
}

测试类启动入口(一般都有的,这边也贴一下吧):

package com.ai.rai.group.workflow.application;
 
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
 
/**
 * Project:html_template
 * Author:hangke
 * Date:2017/3/22
 * Description://TODO add description here
 */
@SpringBootApplication
@ComponentScan(basePackages={"com.ai", "com.asiainfo"})
public class TestApplication
{
    public static void main(String[] args)
    {
        SpringApplication.run(TestApplication.class,args);
    }
}

待测试的Service方法就不贴了,根据自己的实际情况写逻辑就行;

测试类(使用依赖注入):

package com.ai.rai.group.workflow.service.impl;
 
import com.ai.rai.group.workflow.application.BaseTestApplication;
import com.ai.rai.group.workflow.entity.beans.TmWorkInst;
import com.ai.rai.group.workflow.service.IWorkFlowService;
import org.apache.commons.collections.bag.SynchronizedSortedBag;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import sun.tools.jar.Main;
 
import java.util.List;
 
import static org.junit.Assert.*;
@RunWith(SpringJUnit4ClassRunner.class)
public class WorkFlowServiceImpllswTest extends BaseTestApplication {
 
    //Service里面Dao用了依赖注入,这便不能用new对象的方式
    @Autowired
    IWorkFlowService workFlowServiceImpl;
 
    @Test
    public void selectWorkInstById() {
        //这个用的之前写好的Service测试,
        TmWorkInst workInst = new TmWorkInst();
        List<TmWorkInst> ss = workFlowServiceImpl.selectWorkInstById(workInst);
        for (TmWorkInst o : ss)
            System.out.println("==============="+o.toString());
    }
}

控制台部分信息打印:
在这里插入图片描述

加断言

正常的单元测试流程还需要加断言打印日志

加断言可以避免对数据库的误操作,以及缩短测试流程(断言失败就不再执行之后的代码了)

代码:

package com.ai.rai.group.workflow.service.impl;
 
import com.ai.rai.group.workflow.application.BaseTestApplication;
import com.ai.rai.group.workflow.entity.beans.TmWorkInst;
import com.ai.rai.group.workflow.service.IWorkFlowService;
import org.apache.commons.collections.bag.SynchronizedSortedBag;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import sun.tools.jar.Main;
 
import java.util.List;
 
import static org.junit.Assert.*;
 
@RunWith(SpringJUnit4ClassRunner.class)
public class WorkFlowServiceImpllswTest extends BaseTestApplication {
 
    //Service里面Dao用了依赖注入,这便不能用new对象的方式
    @Autowired
    IWorkFlowService workFlowServiceImpl;
 
    @Test
    public void selectWorkInstById() {
        TmWorkInst workInst = new TmWorkInst();
        List<TmWorkInst> ss = workFlowServiceImpl.selectWorkInstById(workInst);
        //添加断言(判空) 
        assertNull(ss);
        for (TmWorkInst o : ss)
            System.out.println("===============" + o.toString());
    }
}

查看日志:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/432294.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

类型转换-空间配置器

文章目录 类型转换C语言的类型转换隐式类型转换&#xff1a;强制类型的转换&#xff1a;C类型转换缺点 C强制类型转换static_castreinterpret_castconst_castdynamic_cast explicit 空间配置器(STL专用内存池)SGI-STL空间配置器实现原理一级空间配置器二级空间配置器内存池SGI-…

stm32启动过程(以F1为例)

文章目录 STM32启动模式STM32启动过程&#xff08;以内部flash启动为例&#xff09;启动文件功能启动文件常用汇编指令及说明 STM32启动模式 M3/M4/M7等内核复位后&#xff0c;做的第一件事&#xff1a; 从地址 0x0000 0000 处取出 堆栈指针 MSP 的初始值&#xff0c;该值为栈…

接踵而至,昆仑万维天工大语言模型发布

目录 天工大语言模型对标GPT3.5对话能力多模态应用同行对比后言 天工大语言模型 国产ChatGPT再次迎来新成员&#xff0c;4月17日下午&#xff0c;昆仑万维正式发布千亿级大语言模型“天工”&#xff0c;同时宣布即日起启动邀请测试&#xff0c;并注册了chatgpt.cn作为域名。天…

认真复习c语言1

最近好好写总结了&#xff08;不能在偷懒了&#xff09;&#xff1a;这一次绝对认真&#xff0c;写总结写了三个多小时&#xff0c;学了一个小时左右TAT&#xff1b; 今天来复习一下c语言的多文件操作&#xff1a; 经过我这几天的摸索&#xff0c;我算是明白了&#xff1a; …

Typora (windows/MacOs版) 你未曾见过的Markdown编辑器

简介 Typora的设计理念非常人性化&#xff0c;与传统编辑器相比&#xff0c;更注重用户的视觉效果和阅读体验。它的编辑界面非常简洁&#xff0c;用户可以就近编辑&#xff0c;随时查看效果&#xff0c;避免频繁地转换预览模式&#xff0c;提高了工作效率和灵活性。 此外&…

d2l解码编码器与seq2seq

seq2seq难死了&#xff0c;卡了好久&#xff0c;好不容易有些头绪了。。。 目录 1.编码器与解码器 1.1原理 1.2实现 2.seq2seq 2.1构造编码器 2.2构造解码器 repeat与cat探索 总结nn.rnn\GRU\LSTM输入输出 看一下解码器的输出 2.3损失计算 2.4训练 2.5预测 2.6预…

【C++】多态---上( 概念、条件及性质)

来前言&#xff1a; 我们之前提到过&#xff0c;C是一门面向对象的语言&#xff0c;它有三大特性——封装、继承、多态。 封装和继承我们已经详细学习过了&#xff0c;本章将进入多态的学习。 目录 &#xff08;一&#xff09;多态的概念 &#xff08;二&#xff09;多态的定…

Vector - CAPL - Panel面板_02

Button 功能&#xff1a;触发指定的操作 说明&#xff1a;Button 是一个控件&#xff0c;使用它可以触发指定的操作。 适用场景&#xff1a; 1、按下启动按钮会使电机启动。 2、启动锁定开关时&#xff0c;所有车门都会自动锁定。 3、启动TestModule测试模块、回放模块等 设…

单机部署MongoDB

文章目录 一、Windows 环境1.1 安装1.2 启动和连接1.3 Compass 图形化客户端 二、Linux 环境2.1 安装2.2 启动和连接 提示&#xff1a;以下是本篇文章正文内容&#xff0c;MongoDB 系列学习将会持续更新 一、Windows 环境 1.1 安装 ①下载安装包&#xff0c;官方下载地址&am…

OldWang带你了解MySQL(七)

文章目录&#x1f525;多表查询&#x1f525;SQL92标准中的查询&#x1f525;非等值连接&#x1f525;自连接&#x1f525;SQL99标准中的查询&#x1f525;SQL99中的自然连接(NATURAL JOIN)&#x1f525;SQL99中的内连接(INNER JOIN)&#x1f525;外连接查询(OUTER JOIN)&#…

行业那么多,为什么计算机领域这么火?

行业那么多&#xff0c;为什么计算机领域这么火&#xff1f;计算机领域火已经不是一天两天了&#xff0c;从开始的进入互联网时代、到“互联网”、再到大数据、人工智能时代、数字化经济……计算机技术从行业内部的自我发展逐渐渗透到各行各业&#xff0c;甚至成为社会整体经济…

NLP深度网络中self.embedding(x)词嵌入后降维方法

在自然语言处理中的循环神经网络中&#xff0c;经常使用torch定义类&#xff0c;self.embedding(x&#xff09;中&#xff0c;x是输入&#xff0c;介绍self.embedding(x&#xff09;返回结果&#xff0c;以及结果的形状&#xff0c;并解释这个形状 在自然语言处理中的循环神经网…

P4158 [SCOI2009]粉刷匠(分组背包问题+前缀和优化)

[TOC](P4158 [SCOI2009]粉刷匠(分组背包问题)) 一、问题 [SCOI2009]粉刷匠 题目描述 windy有 N 条木板需要被粉刷。 每条木板被分为 M 个格子。 每个格子要被刷成红色或蓝色。 windy每次粉刷&#xff0c;只能选择一条木板上一段连续的格子&#xff0c;然后涂上一种颜色。 …

Spring Cloud Gateway: 网关

文章目录 网关Hello world路由: Route谓词: Predicate过滤器: FilterGateway实现限流: RequestRateLimiter过滤器使用Gateway实现服务降级 自定义全局过滤器GateWay中执行流程 网关 API网关就是实现了前端项目和服务端项目之间的统一入口 Nginx实现的是用户和前端项目之间调用…

【Linux】环境变量相关笔记

文章目录 echo $PATHexport和环境变量相关的命令main(int argc,char* argv[],char *env[])三个参数介绍getenv()通过系统调用获取su与su - 的区别&#xff1a;exportsource 和 .优先级 echo $PATH 是用来查环境变量的 export 从下面的图片当中可以看到&#xff0c;的确是将文…

ubuntu 20.04设置开机自启动脚本

1 建立开机启动服务 在 路径下 /lib/systemd/system/rc-local.service 的 rc-local.service 的脚本&#xff0c;内容规定了 rc.local 的启动顺序和行为 这行代码规定了这个service在开机启动时所执行的命令是&#xff1a;/etc/rc.local start。即运行 /etc/rc.local 脚本。不过…

《面试1v1》HashMap

没有人比中国人更懂 HashMap 我是 javapub&#xff0c;一名 Markdown 程序员从&#x1f468;‍&#x1f4bb;&#xff0c;八股文种子选手。 面试官&#xff1a;HashMap 是Java程序员用得最频繁的集合之一,可以给我简单介绍一下它的内部实现机制吗? 候选人&#xff1a; Hash…

C++ -3- 类和对象 (中) | 拷贝构造函数 赋值运算符重载

文章目录 4.拷贝构造函数什么是拷贝构造函数&#xff1f;应用——示例&#xff1a;日期计算器什么情况下需要自己实现拷贝构造函数&#xff1f; 5.赋值运算符重载运算符重载&#xff08;重要&#xff09;赋值运算符重载 拷贝构造函数和赋值重载函数 4.拷贝构造函数 什么是拷贝…

Baumer工业相机堡盟工业相机如何联合BGAPI SDK和OpenCV实现Mono12和Mono16格式位深度的图像保存(C++)

Baumer工业相机堡盟工业相机如何联合BGAPI SDK和OpenCV实现Mono12和Mono16位深度的图像保存&#xff08;C&#xff09; Baumer工业相机Baumer工业相机保存位深度12/16位图像的技术背景代码案例分享1&#xff1a;引用合适的类文件2&#xff1a;BGAPI SDK在图像回调中联合OpenCV保…

Effective C++条款条款42:了解typename的双重意义(Understand the two meanings of typename)

Effective C条款条款42&#xff1a;了解typename的双重意义&#xff08;Understand the two meanings of typename&#xff09; 条款42&#xff1a;了解typename的双重意义1、从属名称和非从属名称2、typename在traits机制中的运用3、牢记 总结 《Effective C》是一本轻薄短小的…