单元测试Unit5

2023-12-25 23:18
文章标签 单元测试 unit5

本文主要是介绍单元测试Unit5,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

学习自
一般一个service对应一个servicetest,一个service里面的接口的方法对应一个或多个test接口。
在这里插入图片描述
在这里插入图片描述

创建一个springboot项目

在这里插入图片描述
在这里插入图片描述
main目录红框里的是springboot的主类,我们测试用test目录下。

@Test注解

用来测试方法的注解。
assertions是断言,assertequals可以判断是不是期望值,assertTrue的期望值是不是true。
在这里插入图片描述
例子:

import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;/*** assertions是断言,assertequals可以判断是不是期望值* assertTrue的期望值是不是true*/
public class Test1 {@Testvoid fun1(){int res=1+1;//Assertions.assertEquals(2,res);Assertions.assertTrue(2==res);}}

@BeforeAll,只初始化一次,注解的方法必须为静态方法。

@AfterAll,结尾中运行一次,注解的方法必须为静态方法。

@BeforeEach,在运行每次有test注解的方法之前都运行一遍beforeeach注解的方法。

@AfterEach,在运行每次有test注解的方法之后都运行一遍aftereach注解的方法。

例子:

import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;public class Test2 {@BeforeAll//只初始化一次,注解的方法必须为静态方法static void init(){System.out.println("init once");}@AfterAll//只结果运行一次,注解的方法必须为静态方法static void eacho(){System.out.println("init over");}@BeforeEach//在运行每次有test注解的方法之前都运行一遍beforeeach注解的方法void each(){System.out.println("init");}@AfterEach//在运行每次有test注解的方法之后都运行一遍aftereach注解的方法void eacha() {System.out.println("inita");}@Testpublic  void t1(){System.out.println(123);}@Testpublic void t2(){System.out.println(456);}}

结果
在这里插入图片描述

@SpringBoot

测试spring项目里的Svc1类,如果不用new一个svc1对象来测试,但是如果scv1又依赖于其他的bean,那new的svc1对象里面的bean的属性就是null*,所以要用SpringBootTest注解,**它会初始化一个spring的上下文。*如果是用junit4,还需要一个@runwith注解。
@Autowired //Spring容器中所有了类型匹配的bean都被注入进来。

Svc1类,用@service。

package com.yl.unittestdemo;import org.springframework.stereotype.Service;@Service//和autowried联用
public class Svc1 {public int add(int a,int b){return a+b;}
}

test类,

package com.yl.unittestdemo;import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;//测试Svc1类,如果不用new一个svc1对象来测试
// 可以用SpringBootTest,它会初始化一个spring的上下文,
@SpringBootTest
public class Test3 {@Autowired      //Spring容器中所有了类型匹配的bean都被注入进来Svc1 svc1;     //注入svc1@Testvoid t1(){//  int res=new Svc1().add(1,2);int res = svc1.add(1,2);Assertions.assertEquals(3,res);}
}

@mockbean

@mockbean修饰的bean,它替换了这个Bean,并且如果用when配置了规则,就按规则运行,否则会返回默认值(int返回0,对象返回null)。如果用mockbean注解svc1,得到的res的结果是0,因为scv1这个bean已经被mock替换了。
同样的,如果svc2类写了加法方法,svc1再调用了svc2,mockbean了svc2以后, 把when改为when(svc2.add(1,2)).thenReturn(2);后,结果任然成立。

      @MockBeanSvc1 svc1;     //注入svc1@Testvoid t1(){when(svc1.add(1,2)).thenReturn(2);//  int res=new Svc1().add(1,2);int res = svc1.add(1,2);int res2 = svc1.jian(2,1);Assertions.assertEquals(3,res);Assertions.assertEquals(1,res2);}
}

@spybean更好用

bebug后是res=2,res2=0。如果只想让when修饰的svc1生效mock,svc2还保持原来的方法,可以使用@spybean,
@spybean介于mock和autowired的一种方式,只模拟配置的规则的类,其他还按原来的规则。

    @SpyBean//只模拟配置的规则的类,其他还按原来的规则。Svc1 svc1;     //注入svc1@Testvoid t1(){when(svc1.add(1,2)).thenReturn(2);//  int res=new Svc1().add(1,2);int res = svc1.add(1,2);int res2 = svc1.jian(2,1);Assertions.assertEquals(2,res);Assertions.assertEquals(1,res2);}
}

这篇关于单元测试Unit5的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/537316

相关文章

springboot+maven搭建的项目,集成单元测试

springboot+maven搭建的项目,集成单元测试 1.在pom.xml文件中引入单元测试的依赖包 <!--单元测试依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></depen

PowerMock 单元测试总结与常见坑解决方案

PowerMock 单元测试总结与常见坑解决方案 官方文档: PowerMock GitHub PowerMock 在单元测试中能够帮助我们解决静态类、final 方法、私有方法等无法轻易 mock 的问题。下面是我在实际使用 PowerMock 时踩过的一些坑,并结合 PowerMock 的一些方法进行总结。 基本依赖和设置 在 Maven 中添加 PowerMock 依赖。在测试

JAVA—单元测试

单元测试:就是针对最小的功能单元(方法),编写测试代码对其进行正确性测试     之前是使用main函数调用来进行检测,无法实现自动化测试 也会影响其他方法的测试 目录 1.junit框架概述 2.junit框架的常见注解 1.junit框架概述 package High_junit;//字符串工具类 用于测试public class String_ju

idea单元测试报错找不到主类

报错截图 主要是单测中没有配置类 在下面的command line 中选择jar manifest 因为条参数过长,这里设置只使用主类 详细解释见: https://www.jianshu.com/p/8322b3b17040

file | 某文件夹【解耦合】下的文件查找功能实现及功能单元测试

文件查找工具 概要思路OS模块 --- 学习版os.getcwd()os.path.dirname(os.getcwd())os.path.dirname() 和 os.path.basename() OS模块 — 实战版单元测试解耦合 概要 梳理业务主逻辑: 查看存放被采集JSON数据的文件夹内的文件列表【所有 包含文件夹下的文件夹下的文件】 这是本节内容聚焦的点和My

【JUnit单元测试框架】

单元测试的概念 单元测试,顾名思义,是针对软件中的最小可测试部分(通常是类或方法)进行的测试。它的目的是确保这些最小单元按照预期工作,从而帮助开发者快速定位和解决问题。单元测试通常遵循“隔离”原则,即测试一个功能单元时,应该尽量减少对其他部分的依赖,以便专注于当前单元的行为。 历史做法及其问题 将所有测试代码都放在main方法中,并通过main方法去调用其他方法进行测试。这种做法存在几个显著

visual studio2015单元测试

尝试引用了包含待测了待测程序的项目,但是不知道该如何调用待测代码,所以只能通过引用生成的库文件 进行单元测试的步骤: 一、创建控制台静态库项目,将要测试的代码编译为库文件 二、创建单元测试项目,引用创建的库文件,并在stdafx.h中包含之前库文件的头文件: 1)直接include头文件的绝对路径 2)将头文件复制到单元测试项目的根目录下,并直接在stdafx.h头文件中include头

软件测试常用工具总结(测试管理、单元测试、接口测试、自动化测试、性能测试、负载测试...)

前言 在软件测试的过程中,多多少少都是会接触到一些测试工具,作为辅助测试用的,以提高测试工作的效率,使用好了测试工具,能对测试起到一个很好的作用,同时,有些公司,也会要求掌握一些测试工具,或者,是在面试时,也会被问到测试工具的,比如,在面试时,最常见的问题便是,你在测试时,用的是什么测试工具?或者,要做性能测试时,要用什么测试工具进行测试会比较好?等等问题。 作为测试人员,了解下现在有哪些

单元测试 Mock不Mock?

文章目录 前言单元测试没必要?Mock不Mock?什么是Mock?Mock的意义何在? 如何Mock?应该Mock什么?Mock 编写示例 总结 前言 前段时间,我们团队就单元测试是否采用 Mock 进行了一番交流,各有各的说法。本文就单元测试 Mock不Mock 给出我的观点,欢迎各位同仁提出不同的意见,共同探讨、相互交流。 单元测试没必要? 我见过好多不写单元测试的项目,

RD单元测试和QA接口测试的区别

1.单元测试 单元测试的基本原则:单元测试应该测试独立的单元模块,这个单元不应依赖于其他模块。 单元测试会强迫你去把各个模块解耦,因为耦合的很紧的模块是很难进行单元测试的,一般情况下,一个普通的程序员在任务很紧的时候很难费劲心思去将代码进行模块化的;当为了单元测试,自己就会去想方设法将模块解耦,这也算是单元测试的一个副产品吧。 单元测试能够进行最仔细的最细致的最方便的最全面的测试;只要测试用