Junit

article/2025/9/11 21:04:18

Junit单元测试

简介:本文主要讲解,如何使用Eclipse,进行单元测试。

1.准备工作:搭建实验环境(Eclipse+Junit+Ant)

Eclipse:http://www.eclipse.org/

JUnit:http://www.junit.org/

Ant:http://ant.apache.org/

说明:Eclipse 从 3.2 版开始,支持 JUnit4。

​ Ant 是基于 Java 的开源构建工具。Eclipse 中已经集成了 Ant。

2.新建项目(MyFirstJUnitSample),并进行相关设置

“文件”→“New”→“ Java Project”,打开“New Java Project”窗口。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XgOUlra5-1666674838527)(C:/Users/11848/AppData/Roaming/Typora/typora-user-images/image-20221023191959455.png)]

(1)新建单元测试代码目录(testsrc) 在“Source” 选项卡中单击“create new source folder”,创建新的 source folder——testsrc (testsrc 用于放测试代码)然后单击 finish。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1j46QwDW-1666674838528)(C:/Users/11848/AppData/Roaming/Typora/typora-user-images/image-20221023192042496.png)]

(2)把 JUnit 引入当前项目库中

在“Libraries”选项卡中单击“Add Library…”,选择“JUnit”,然后单击“Next”,选择 版本“JUnit4”,单击“Finish”,完成 JUnit 的引入。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QITvpUFJ-1666674838528)(C:/Users/11848/AppData/Roaming/Typora/typora-user-images/image-20221023192141638.png)]

​ 单击“Finish”。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-c6cRkucp-1666674838529)(C:/Users/11848/AppData/Roaming/Typora/typora-user-images/image-20221023192220040.png)]

3.编写 Calulator 类

在项目中的 src 目录中新建 myclass 包,在 myclass 包中添加 Calculator 类,代码如下:

//Calculator.java
package myclass;
public class Calculator {
private static int result; //静态变量,用于存储运行结果public void add(int n) { result= result + n; } public void substract(int n) { result =result - 1; //Bug: 正确的应该是 result =result-n} public void multiply(int n) {} //此方法尚未写好public void divide(int n) { result =result / n; } public void square(int n) { result = n * n; } public void squareRoot(int n) { for (;; ) {} //Bug : 死循环} public void clear() { // 将结果清零result = 0; } public int getResult() { return result; }

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yRejJGII-1666674838529)(C:/Users/11848/AppData/Roaming/Typora/typora-user-images/image-20221023192406135.png)]

4.编写 Calculator 类的第一个测试类 CalculatorTest,生成 JUnit 测试框架。

该测试类包括四个测试方法,分别对应测试 Calculator 的 add、substract、 multiple、divide 方法。

步骤如下

(1)首先,在项目中的 testsrc 中新建 myclass 包。右键单击 Calculator 类,选择“New”→“JUnit Test Case”。在窗口(如图 7 所示)中可看到:测 试类的 Name 为 CalculatorTest, 被测试类“ Class under test ” 为 myclass.Calculator。

将“Source Folder”指定为 MyFirstJUnitSample/testsrc(即:指定 JUnit 测试类的源代码放在 testsrc 目录中,与项目的被测试类分开。)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ulNNxuAV-1666674838529)(C:/Users/11848/AppData/Roaming/Typora/typora-user-images/image-20221023192517050.png)]

(2)单击“Next”,如图 8 所示。选择需要测试的方法,然后单击“Finish”。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-37UAzFIM-1666674838530)(C:/Users/11848/AppData/Roaming/Typora/typora-user-images/image-20221023193155396.png)]

Junit 将自动生成测试类 CalculatorTest 的测试框架,结果如下

//myclass.CalculatorTest.java
package myclass;
import static org.junit.Assert.*;
import org.junit.Before;
import org.junit.Test;
public class CalculatorTest {@Beforepublic void setUp() throws Exception {}@Testpublic void testAdd() {fail("Not yet implemented");}@Testpublic void testSubstract() {fail("Not yet implemented");}@Testpublic void testMultiply() {fail("Not yet implemented");}@Testpublic void testDivide() {fail("Not yet implemented");}
}

(3)对 CalculatorTest 中自动生成的代码进行修改,结果如下:

//myclass.CalculatorTest.java
package myclass;
import static org.junit.Assert.*;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
public class CalculatorTest {private static Calculator calculator = new Calculator();@Beforepublic void setUp() throws Exception {calculator.clear();}@Testpublic final void testAdd() {calculator.add(2);calculator.add(3);assertEquals(5, calculator.getResult());}@Testpublic final void testSubstract() {calculator.add(10);calculator.substract(2);assertEquals(8, calculator.getResult());}@Ignore("Multiply() Not yet implemented")@Testpublic final void testMultiply() {fail("Not yet implemented"); }@Testpublic final void testDivide() {calculator.add(8);calculator.divide(2);assertEquals(4, calculator.getResult());}
}

5.运行测试

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VJKzpLQ5-1666674838530)(C:/Users/11848/AppData/Roaming/Typora/typora-user-images/image-20221023193920491.png)]

(1)在测试类“CalculatorTest.java”上单击右键,在弹出 的菜单中选择“Run As”→“JUnit Test”。运行结果如图 10 所示。进度条是红 色表示发现错误,具体的测试结果在进度条上面有表示。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Gnl7AuC8-1666674838531)(C:/Users/11848/AppData/Roaming/Typora/typora-user-images/image-20221023193938937.png)]

发现 Calculator 类的 Substract 方法代码有问题,去修改,改正错误。

(2)修改 Calculator 后,重新运行测试,查看测试结果。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Z4LKVEFk-1666674838531)(C:/Users/11848/AppData/Roaming/Typora/typora-user-images/image-20221023194008953.png)]

(3)进一步完善测试用例 在测试类 CalculatorTest 中添加测试方法,增加 SquareRoot 方法的测试、 以及对 divide 方法除 0 时是否抛出异常的测试。

@Test(timeout = 1000)
public void testSquareRoot() {calculator.squareRoot(4);assertEquals(2, calculator.getResult());
}
@Test(expected = ArithmeticException.class)
public void divideByZero() {calculator.divide(0);
}

6.编写 Calculator 类的第二个测试类 CalculatorAdvancedTest.该测试类测试 Calculator 类的 square 方法。(此案例中,演示了参数测试)

说明:参数化测试是 JUnit 3 不具备的功能。

JUnit4 中参数化测试要点:

(1) 测试类必须由 Parameterized 测试运行器修饰

(2) 准备数据。数据的准备必须在一个方法中进行,该方法须满足条件:

⚫ 该方法必须由 Parameters 注解修饰

⚫ 该方法必须是 public static

⚫ 该方法必须返回 Collection 类型

⚫ 该方法没有参数

⚫ 该方法名字不做要求

步骤: 右键单击“Calculator”类,在弹出的菜单中选择“New”→“JUnit Test Case”。如下图修改“Source Folder” 为“testsrc”,测试类的 Name 为“CalculatorAdvancedTest”。单击“Next”,在 Test Mothods 列表中选 择“square”方法。单击“Finish”即可。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hujVeQpb-1666674838531)(C:/Users/11848/AppData/Roaming/Typora/typora-user-images/image-20221023194219733.png)]

CalculatorAdvancedTest.java 的代码如下:

//CalculatorAdvancedTest.java
package myclass;
import static org.junit.Assert.*;
import java.util.Arrays;
import java.util.Collection;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
/**
* 参数化测试的类必须由Parameterized测试运行器修饰
*/
@RunWith(Parameterized.class) 
public class CalculatorAdvancedTest {
private static Calculator calculator=new Calculator();
private int param;
private int result;
/**
*
*准备数据
*/
@Parameters public static Collection<Object[]> data(){
return Arrays.asList(new Object[][] {{2,4},{0,0},{-3,9}});
}
//构造函数,对变量进行初始化
public CalculatorAdvancedTest(int param,int result){
this.param=param;
this.result=result;
}
@Before
public void setUp() throws Exception {
calculator.clear();
}
@Test
public void testSquare() {
calculator.square(param);
assertEquals(result,calculator.getResult());
}
}

运行 CalculatorAdvancedTest 测试类。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TEQZCaRK-1666674838532)(C:/Users/11848/AppData/Roaming/Typora/typora-user-images/image-20221023194325005.png)]

测试结果通过。


http://chatgpt.dhexx.cn/article/CTlmIciv.shtml

相关文章

juicer使用案例

代码结构&#xff1a; 编写main.html&#xff1a;引入方式可从bootcdn直接copy script标签 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge&…

juicer

UPDATE: juicer-0.3.1-dev published github.com. 让我们从一段代码说起&#xff0c;假设有一段这样的JSON数据&#xff1a; var json{name:"流火",blog:"ued.taobao.org" };我们需要根据这段JSON生成这样的HTML代码&#xff1a; 流火 (blog: ued.taoba…

Juicer软件的安装详解

欢迎关注”生信修炼手册”! 软件安装是生物信息实战中最基础的技能之一&#xff0c;只有确保软件安装无误&#xff0c;后续使用起来才会得心应手&#xff0c;不会有很多的bug。juicer软件提供了Hi-C数据一键化分析的pipeline, 这样高度的封装使得用户操作起来更加简便&#xff…

Juicer实战详解

欢迎关注”生信修炼手册”! Juicer软件的运行是非常简单的&#xff0c;只需要设置几个参数就可以了&#xff0c;本文利用官网的小的测试测试数据集来展示该软件的基本用法。 1. 下载测试数据 从以下链接下载测试数据集 https://github.com/aidenlab/juicer/wiki/Running-Juicer…

Juicer: 辅助基因组组装

Juicer: 辅助基因组组装 Juicer 导读 本文主要对处理HiC数据的Juicer程序进行一个简短的介绍&#xff0c;并展示如何利用Juicer进行基因组组装中染色体挂载的第一步。 1. 介绍 算法介绍 Juicer[1] 是一款能够提供一键式分析Loop-Resolution的程序。 特点 只需一次单击&#xff…

如何同步数据库数据

第一步 打开mysql的客户端 这里使用navicat&#xff0c;连接数据库&#xff0c;等到navicat主页面&#xff0c;双击需要操作的数据库连接 第二步 登录到数据库主页面后&#xff0c;点击左侧的数据库链接&#xff0c;打开数据库&#xff0c;可以看到可以操作的所有数据库 第三…

Logstash数据同步

Logstash 是 Elastic 技术栈中的一个技术&#xff0c;它是一个数据采集引擎&#xff0c;可以从数据库采集数据到 ES 中。可以通过设置 自增 ID 主键 或 更新时间 来控制数据的自动同步&#xff1a; 自增 ID 主键&#xff1a;Logstatsh 会有定时任务&#xff0c;如果发现有主键…

数据同步-数据库间的双向同步

当业务侧需要MongoDB降配、活动数据迁移时都需要应用切换数据库实例进行发版&#xff0c;发版过程中需最大程度保证新旧数据库数据一致&#xff0c;这就涉及到了一种同步技术-数据双向同步。在同步过程中遇到了一些可能会产生问题或引发思考的点&#xff0c;希望利用这篇文档进…

什么是数据实时同步,为什么数据实时同步很重要

随着云成为前所未有的数据供应渠道&#xff0c;数据准确性、一致性和隐私性的重要性与日俱增。看似轻微的数据错误或故障可能会产生重大负面影响。但是&#xff0c;​对数据进行排序并将其与现有​&#xff0c;然后定期解析数据实时同步&#xff0c;同时保持数据完整性&#xf…

数据同步工具的研究(实时)

数据同步工具的研究&#xff08;实时同步&#xff09;&#xff1a; FlinkCDC、Canal、Maxwell、Debezium ——2023年01月17日 ——Yahui Di 1. 常用CDC方案比较 2. FlinkCDC FlinkCDC的简介&#xff1a; Flink CDC 连接器是 Apache Flink 的一组源连接器&#xff0c;使用变…

聊聊数据同步

一、简述 数据同步&#xff0c;这是一个很宽泛的概念&#xff0c;在互联网或者传统软件公司&#xff0c;一定会遇到数据同步的场景。数据同步一般会遇到的问题诸如同步时延、数据一致性、性能低、强依赖于中间件、失败后无法补偿等。本文笔者试图简要总结下常见的数据同步场景&…

大数据的数据同步方式

一、全量覆盖 不需要分区&#xff0c;同步时直接覆盖插入。适用于数据不会有任何新增和变化的情况。比如地区、时间、性别等维度数据&#xff0c;不会变更或变更不影响业务&#xff0c;可以只保留最新值 二、仅新增同步 每天新增一个日期分区&#xff0c;同步并存储当天的新…

DataLink 数据同步平台

文章目录 一、数据同步平台概述核心能力工作原理详细流程 二、快速接入部署中间件程序配置创建数据库表启动应用注意事项 三、扩展&#xff1a;四种 CDC 方案比较优劣 一、数据同步平台 在项目开发中&#xff0c;经常需要将数据库数据同步到 ES、Redis 等其他平台&#xff0c;通…

数据同步之全量同步与增量同步

一、什么是数据同步 业务数据是数据仓库的重要数据来源&#xff0c;我们需要每日定时从业务数据库中抽取数据&#xff0c;传输到数据仓库中&#xff0c;之后再对数据进行分析统计。 为保证统计结果的正确性&#xff0c;需要保证数据仓库中的数据与业务数据库是同步的&#xff0…

你了解数据同步吗?

1.写在前面 本篇博客参考《操作系统实战 45 讲》 上篇博客主要介绍的是程序放在什么地方&#xff0c;开发操作系统要了解的最核心的硬件——CPU、MMU、Cache、内存&#xff0c;知道了它们的工作原理。在程序运行中&#xff0c;它们起到了至关重要的作用。 在开发我们自己的操…

数据库同步有哪些方式?【怎么保障目标和源数据一致性】

文章目录 摘要一、几种主流的数据库同步方式二、架构及工作原理三、全量同步和实时增量同步机制四、源和目标五、举例&#xff1a;Oracle 数据实时同步到 Elasticsearch六、目标和源数据一致性七、异构数据类型转换八、总结 摘要 数据库同步有3大难题&#xff1a; 1是如何保障…

数据技术篇之数据同步

第3章 数据同步 1.数据同步基础 直连同步 &#xff08;1&#xff09;什么是直连同步&#xff1f;直连同步是指通过定义好的规范接口 API 和基于动态链接库的方式直接连接业务库&#xff0c;如 ODBC/JDBC 等规定了统 一规范的标准接口&#xff0c;不同的数据库基于这套标准接口…

聊聊数据同步方案

文章目录 常用的数据同步方案数据库迁移场景数据同步场景应用代码中同步定时任务同步通过MQ实现同步通过CDC实现实时同步 CDC&#xff08;change data capture&#xff0c;数据变更抓取&#xff09;Canal基于日志增量订阅&消费支持的业务工作原理Mysql主备复制实现Canal架构…

大数据之路——数据同步

三、数据技术篇—— 数据同步 3.1 数据同步基础 3.1.1 直连同步3.1.2 数据文件同步3.1.3 数据库日志解析同步 3.2 数据仓库同步方式3.2.1 批量数据同步3.2.2 实时数据同步 3.3 同步遇到的问题3.3.1 分库分表3.3.2 增量全量同步的合并3.3.3 数据漂移的处理 有多种不同应用场景&…

关于数据同步的几种实现

关于数据同步的几种实现 概述 关于数据同步主要有两个层面的同步&#xff0c;一是通过后台程序编码实现数据同步&#xff0c;二是直接作用于数据库&#xff0c;在数据库层面实现数据的同步。通过程序编码实现数据同步&#xff0c;其主要的实现思路很容易理解&#xff0c;即有…