【单元测试】Junit 4(二)--eclipse配置Junit+Junit基础注解

news2024/11/18 9:27:10

目录

1.0 前言

1.1 配置Junit 4

1.1.1 安装包

1.1.2 创建Junit项目

1.2 Junit 4 注解

1.2.1 测试用例相关的注解

1.2.1.1 @Before

1.2.1.2 @After

1.2.1.3 @BeforeClass

1.2.1.4 @AfterClass

1.2.1.5 @Test

1.2.1.6 @Ignore

1.2.1.7 示例

1.2.2 打包测试Suite相关的注解

1.2.2.1 @RunWith(Suite.class)

1.2.2.2 @Suite.SuiteClasses(...{xx.class, xx.class, ...})

1.2.2.3 示例

1.2.3 参数化测试相关的注解

1.2.3.1 @RunWith(Parameterized.class)

1.2.3.2 @Parameters

1.2.3.3 示例

1.2.4 控制用例执行顺序相关的注解

1.2.4.1 @FixMethodOrder

1.2.5 自定义规则Rule相关的注解

1.2.5.1 @Rule和@ClassRule

1.2.5.2 JUnit提供了以下几个Rule实现,必要时也可以自己实现Rule


1.0 前言

​ 前面我们介绍了白盒测试方法,后面我们来介绍一下Junit 4,使用的是eclipse(用IDEA的小伙伴可以撤了)

1.1 配置Junit 4

1.1.1 安装包

我们需要三个jar包:

  • org.junit_4.13.2.v20211018-1956.jar
  • org.hamcrest.core_1.3.0.v20180420-1519.jar
  • org.hamcrest-library-1.3.jar

org.junit_4.13.2.v20211018-1956.jar和org.hamcrest.core_1.3.0.v20180420-1519.jar这两个jar包是eclipse自带的

然后我们需要下一个org.hamcrest-library-1.3.jar

1.1.2 创建Junit项目

点击 new >> New >> Project

选择Java Project 点击next

输入项目名,选择jre,点击next

选择 Libraries >> Classpath >> Add Extemal JARs

选择之前我们的三个jar包,一般放在eclipsed的plugins目录,org.hamcrest-library-1.3.jar则在自己下载的目录(可以把下载下来的jar包也丢这里),点击Finish

我们新建一个文件夹存放junit代码

新建一个项目

编写Demo.java代码:

public class Demo {
	public int add (int a, int b) {
		return a + b;
	}
	public int div (int a, int b) {
		return a / b;
	}
}

右键项目,new一个,这里没有junit,我们去其他里面找

在java下的junit,选择Test Case,点击next

选择junit4,选择目录到我们刚刚建的junit文件夹,选择Finish

在DemoTest.java中输入代码:

import static org.junit.Assert.*;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;

public class DemoTest {
	
	Demo demo;
	
	@Before
	public void setUp() throws Exception {
		demo = new Demo();
	}
	
	@After
	public void tearDown() throws Exception {
		demo = null;
	}
	
	@Test
	public void testAdd() {
		// 实例化一个类
		Demo demo = new Demo();
		// 期望值
		int expetected = 2;
		// 真实值
		int trueValue = demo.add(1, 1);
		// 断言方法
		assertEquals(expetected, trueValue);
	}

	@Test
	public void testDiv() {
		// 实例化一个类
		Demo demo = new Demo();
		// 期望值
		int expetected = 2;
		// 真实值
		int trueValue = demo.div(2, 1);
		// 断言方法
		assertEquals(expetected, trueValue);
	}

}

运行

1.2 Junit 4 注解

1.2.1 测试用例相关的注解

1.2.1.1 @Before

public void setUp() throws Exception {
    // 初始化所需的资源
}

在每个测试方法之前执行,用以初始化需要初始化的资源

1.2.1.2 @After

@After
public void tearDown() throws Exception {
    // 关闭资源
}

在每个测试方法之后执行,用以关闭需要初始化的资源

1.2.1.3 @BeforeClass

@BeforeClass
public static void setup()  throws Exception {
    // 初始化资源
}

在所有方法执行之前执行,一般被用作执行计算代价很大的任务,如打开数据库连接。被@BeforeClass 注解的方法应该是静态的(即 static类型的)。

1.2.1.4 @AfterClass

@AfterClass
public static void tearDown()  throws Exception {
    // 关闭资源
}

在所有方法执行之后执行,一般被用作执行类似关闭数据库连接的任务。被@AfterClass 注解的方法应该是静态的(即 static类型的)。

1.2.1.5 @Test

@Test
public void test01() {
	// 测试,断言等
}

 

包含了真正的测试代码,并且会被Junit应用为要测试的方法。

@Test注解有两个可选的参数:

  • expected表示此测试方法执行后应该抛出的异常,(值是异常名)
  • timeout检测测试方法的执行时间

1.2.1.6 @Ignore

注释掉一个测试方法或者一个类,被注释的方法或类,不会被执行。

注意:JUnite4的执行顺序:@BeforeClass > @Before > @Test1 > @After > @Before > @Test2 > @After ...... > @AfterClass

1.2.1.7 示例

import static org.junit.Assert.*;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;

public class DemoTest {
    
	@BeforeClass
	public static void setup()  throws Exception {
		// 这里初始化资源(如连接数据库)
	}
    
	@AfterClass
	public static void tearDown()  throws Exception {
		// 关闭资源()
	}
	
	@Before
	public void setUp() throws Exception {
		System.out.println("SetUp.....");
		// 这里初始化我们所需要的资源
	}
	
	@After
	public void tearDown() throws Exception {
		System.out.println("Gone.....");
		// 这里关闭我们的资源
	}
	
	@Test
	public void test01() {
		// 测试1
	}

	@Ignore
	@Test
	public void test02() {
		// 测试2
	}

}

1.2.2 打包测试Suite相关的注解

1.2.2.1 @RunWith(Suite.class)

需要一个特殊的Runner, 因此需要向@RunWith注解传递一个参数Suite.calss。

1.2.2.2 @Suite.SuiteClasses(...{xx.class, xx.class, ...})

用来表明这个类是一个打包测试类,把需要打包的类作为参数传递给该注解即可。

1.2.2.3 示例

有了这两个注解之后,就已经完整的表达了所有的含义,因此下面的类无关紧要,随便起个类名,内容为空

import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;

public class DemoTest {

	@RunWith(Suite.class)
	@SuiteClasses({Demo01.class, Demo02.class, Demo03.class})
	public class AllTests {
		
	}
}

1.2.3 参数化测试相关的注解

1.2.3.1 @RunWith(Parameterized.class)

首先要为这种测试专门生成一个新的类,而不能与其他测试共用同一个类。

这里不使用默认的Runner了,使用带有参数化功能的Runner。

@RunWith(Parameterized.class)这条语句就是为这个类指定了ParameterizedRunner。

这个需要和我们后面的@Parameters组合使用

1.2.3.2 @Parameters

放在方法上。

定义一个待测试的类,并且定义两个变量,一个用于存放参数,一个用于存放期待的结果。

定义测试数据的结合,就是下方的prepareData()方法,该方法可以任意命名,但是必须使用@Parameters标注进行修饰。

这里需要注意:其中的数据是一个二维数组,数据两两一组,每组中的这两个数据,一个是参数,一个是预期的结果。比如第一组{2,4}中:2是参数,4是预期结果。这两数据顺序无所谓。

然后,是构造函数,其功能就是对先前定义的两个参数进行初始化。这里要注意参数的顺序,要和上面的数据集合的顺序保持一致。(比如都是先参数后结果)

那么这里我们还是看下面的例子吧

1.2.3.3 示例

import static org.junit.Assert.assertEquals;

import java.util.Arrays;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;

@RunWith(Parameterized.class)
public class FibonacciTest {

    @Parameters(name = "{index}: fib({0})={1}")
    public static Iterable<Object[]> data() {
        return Arrays.asList(new Object[][] { 
                 { 0, 0 }, { 1, 1 }, { 2, 1 }, { 3, 2 }, { 4, 3 }, { 5, 5 }, { 6, 8 }
           });
    }

    private int input;
    private int expected;

    public FibonacciTest(int input, int expected) {
        this.input = input;
        this.expected = expected;
    }

    @Test
    public void test() {
        assertEquals(expected, Fibonacci.compute(input));
    }
}

1.2.4 控制用例执行顺序相关的注解

1.2.4.1 @FixMethodOrder

控制测试方法的执行顺序的。

该注解的参数是org.junit.runners.MethodSorters对象。

枚举类org.junit.runners.MethodSorters中定义三种顺序类型:

MethodSorters.JVM:按照JVM得到的方法顺序,即代码中定义的方法顺序。

MethodSorters.DEFAULT:默认的顺序,以确定但不可预期的顺序执行。

MethodSorters.NAME_ASCENDING:按方法名字母顺序执行。

1.2.5 自定义规则Rule相关的注解

1.2.5.1 @Rule和@ClassRule

  1. 什么是Rule实现

    Rule是一组实现了TestRule接口的共享类,提供了验证,监视TestCase和外部资源管理等能力。

    即,提供了测试用例执行过程中一些通用功能的共享能力,使不必重复编写一些功能类似的代码。

  2. JUnit4中包含两个注解:@Rule和@ClassRule

    用于修饰Field或返回Rule的Method。

两者作用域不同:

  • @Rule的作用域是测试方法。
  • @ClassRule则是测试Class。

1.2.5.2 JUnit提供了以下几个Rule实现,必要时也可以自己实现Rule

  • Verifier:验证测试执行结果的正确性。

  • ErrorCollector:收集测试方法中出现的错误信息,测试不会中断,如果有错误发生,测试结束后会标记失败。

  • ExpectedException:提供灵活的异常验证功能。

  • Timeout:用于测试超时的Rule。

  • ExternalResource:外部资源管理。

  • TemporaryFolder:在JUnit的测试执行前后,创建和删除新的临时目录。

  • TestWatcher:监视测试方法生命周期的各个阶段。

  • TestName:在测试方法执行过程中提供获取测试名字的能力。


最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

在我的QQ技术交流群里(技术交流和资源共享,广告勿扰)


以上就是这节的全部内容,如有错误,还请各位指正!

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

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

相关文章

JAVA工程打包

目录 一、工程代码和第三方依赖包分开 二、工程代码和第三方依赖包打入同一个jar包 1、工程的class文件和依赖的第三方jar包所包含的class文件打进同一个jar包中。部署时&#xff0c;直接部署该jar包即可。 2、如果是springboot工程&#xff0c;可以将工程的class文件和依赖…

iOS多语言解决方案全面指南

本文以及相关工具和代码旨在为已上线的iOS项目提供一种快速支持多语言的解决方案。由于文案显示是通过hook实现的&#xff0c;因此对App的性能有一定影响&#xff1b;除了特殊场景的文案显示需要手动支持外&#xff0c;其他任务均已实现自动化。 本文中的部分脚本代码基于 Chat…

OpenShift 4 - 可观测性之用 Network Observability Operator 对网络流量进行监控观测(视频)

《OpenShift / RHEL / DevSecOps 汇总目录》 说明&#xff1a;本文已经在支持 OpenShift 4.12 Loki Operator 5.7.2 Network observability 1.2.0 的环境中验证 文章目录 Network Observability 相关组件和架构安装 Network Observaility 功能安装 Operator配置对象存储配置 …

Scrapy的基本使用

目录 Scrapy是什么 安装 使用 获取更多页面信息 写入数据库 图片下载 文件下载 更改文件名称以及路径 更改图片名称以及路径 循环获取页面信息时&#xff0c;item的数据重复或者对不上 下载文件时获取文件流直接上传到某个地方 Scrapy是什么 Scrapy 是一个基于 Pyth…

园区自然人代开果真那么好?可以解决成本票缺失吗?

园区自然人代开果真那么好&#xff1f;可以解决成本票缺失吗&#xff1f; 《税筹顾问》专注于园区招商、企业税务筹划&#xff0c;合理合规助力企业节税&#xff01; 自然人代开也就是指个人跟公司发生业务往来的时候&#xff0c;公司要求个人开具发票&#xff0c;进行入账&am…

open-mmlab/mmocr 环境搭建、推理和训练入门教程【一】

文章目录 博文基础信息Linux 搭建 open-mmlab/mmocr 运行环境准备数据集准备必要的预训练模型推理训练测试可视化输出 &#x1f4d9; 预祝各位 前途似锦、可摘星辰 博文基础信息 https://mmocr.readthedocs.io/zh_CN/dev-1.x/get_started/quick_run.html显卡&#xff0c;11G 1…

【Pytorch】梯度裁剪——torch.nn.utils.clip_grad_norm_的原理及计算过程

文章目录 一、torch.nn.utils.clip_grad_norm_二、计算过程三、确定max_norm 众所周知&#xff0c;梯度裁剪是为了防止梯度爆炸。在训练FCOS算法时&#xff0c;因为训练过程出现了损失为NaN的情况&#xff0c;在github issue有很多都是这种训练过程出现loss为NaN&#xff0c;作…

RISCV Reader笔记_3 RISCV汇编

RISC-V 汇编语言 函数调用的步骤在计算机组成与设计中也有过涉及&#xff1a; 指定寄存器存入参数&#xff1b;跳转到函数开始位置&#xff08;jal&#xff09;&#xff1b;在callee中按需保存寄存器&#xff1b;执行函数&#xff1b;恢复保存的寄存器&#xff1b;把返回值存入…

使用传统图像处理算法+机器学习进行shadow detection

前言 阴影是图像中常见的现象&#xff0c;它们对于场景理解和分析非常重要。由于阴影区域通常比较暗淡&#xff0c;而且与周围物体区别较大&#xff0c;因此在图像处理和计算机视觉领域中&#xff0c;阴影检测是一个重要的研究方向。传统的阴影检测算法通常基于阈值或边缘检测…

深入理解 kernel panic 的流程

我们在项目开发过程中&#xff0c;很多时候会出现由于某种原因经常会导致手机系统死机重启的情况&#xff08;重启分Android重启跟kernel重启&#xff0c;而我们这里只讨论kernel重启也就是 kernel panic 的情况&#xff09;&#xff0c;死机重启基本算是影响最严重的系统问题了…

180_Power BI 新卡片图计算组与同环比应用

180_Power BI 新卡片图计算组与同环比应用 一、背景 在 2023 年 6 月&#xff0c;Power BI 更新了新的视觉对象&#xff1a;Card(new) 。 当前还需要在预览功能中将其打开。 我们在实际的应用中将新卡片图做了一些应用&#xff0c;先来看看具体效果。 Power BI 公共 web 效果…

安全区域内活动UWB标签,高精度UWB定位监测,室内厘米级测距应用

随着人们对于室内安全和定位需求的增加&#xff0c;相应的技术应运而生&#xff0c;超宽带&#xff08;UWB&#xff09;标签定位技术应用于室内定位领域&#xff0c;并获得了快速的发展和应用。 UWB技术是一种基于极窄脉冲的无线技术&#xff0c;它的主要特点是无载波&#xf…

软件测试技能,JMeter压力测试教程,setUp线程组批量登录(九)

前言 前面一篇已经实现了在 setUp 线程组实现单个用户先登录后提取token给其它线程组使用&#xff0c;在压测的时候&#xff0c;单个用户登录很显然不能满足我们的压测需求 我们在压测接口的时候&#xff0c;需批量获取多个用户登录后返回的token值&#xff0c;那么在setUp 线…

RabbitMQ消息队列高级特性

文章目录 1.消息的可靠投递2.ConSumer ACK消费者确认接收消息3.消费者限流4.TTL过期时间5.死信队列6.延迟队列7.日志与监控8.消息追踪 1.消息的可靠投递 在线上生产环境中&#xff0c;RabbitMQ可能会产生消息丢失或者是投递失败的一个场景&#xff0c;RabbitMQ为了避免这种场景…

Redis慢查询分析

慢查询分析 谓慢查询日志就是系统在命令执行前后计算每条命令的执行时间&#xff0c;当超过预设阀值&#xff0c;就将这条命令的相关信息&#xff08;例如&#xff1a;发生时间&#xff0c;耗时&#xff0c;命令的详细信息&#xff09;记录下来。 执行一条命令分为如下4个部分…

【每日算法 数据结构(C++)】—— 05 | 判断单链表是否有环(解题思路、流程图、代码片段)

文章目录 01 | &#x1f451; 题目描述02 | &#x1f50b; 解题思路03 | &#x1f9e2; 代码片段 The future belongs to those who believe in the beauty of their dreams. 未来属于那些相信梦想之美的人 01 | &#x1f451; 题目描述 给你一个单链表&#xff0c;请判断其中是…

Mac(M1)上安装Ubuntu虚拟机

Mac&#xff08;M1&#xff09;上安装Ubuntu虚拟机 0.下载资料汇总 VMware Fusionhttps://www.vmware.com/products/fusion/fusion-evaluation.htmlubuntu-desktop-arm64.isohttps://cdimage.ubuntu.com/jammy/daily-live/current/ 1.安装VMware Mac版本的VMware叫 VMware …

黑马程序员前端 Vue3 小兔鲜电商项目——(十一)支付页

文章目录 基础数据渲染封装接口数据渲染 支付功能实现支付携带参数支付宝沙箱账号信息 支付结果页展示模版代码绑定路由渲染数据 倒计时逻辑函数封装 支付页有俩个关键数据&#xff0c;一个是要支付的钱数&#xff0c;一个是倒计时数据&#xff08;超时不支付商品释放)。 基础…

Tomcat项目更新Tomcat版本,重新配置conf,并在Idea运行项目,服务器替换SSL证书

Tomcat项目更新Tomcat版本&#xff0c;重新配置conf&#xff0c;并在Idea运行项目 1.下载Tomcat包2.Tomcat配置-ssi配置3.Idea运行 Tomcat 项目4.服务器Tomcat替换SSL证书4. Tomcat 项目重启 1.下载Tomcat包 Tomcat 官网 - https://tomcat.apache.org/ jdk1.8.0_191 我选择的…

如何在电脑、手机《酷游链接》录制屏幕?一看就会!也有剪辑录制视频的方法哦!

最近&#xff0c;我的生活中出现了许多需要录制电脑屏幕的场景&#xff01; 『酷游链kw9㍠N͜E͜T提供』娜娜友善提醒&#xff0c;要自己输入才会显示出来&#xff01;比如会议&#xff0c;教学等场景。这些场景我们可以通过Windows10的内建软体来解决。另外&#xff0c;也出现…