【JUnit技术专题】「入门到精通系列」手把手+零基础带你玩转单元测试,让你的代码更加“强壮”(核心API篇)

news2024/11/17 9:26:00

手把手+零基础带你玩转单元测试,让你的代码更加“强壮”(核心API篇)

  • JUnit 中的重要的 API
    • Assert 类
    • TestCase 类
    • TestResult 类
    • TestSuite 类

JUnit 中的重要的 API

在这里插入图片描述
JUnit 中的最重要的程序包是 junit.framework 它包含了所有的核心类。一些重要的类列示如下:

序号类名功能
1Assertasssert方法的集合
2TestCase一个定义了运行多重测试的固定装置
3TestResultTestResult集合了执行测试样例的所有结果
4TestSuiteTestSuite是测试的集合

Assert 类

下面介绍的是 org.junit.Assert 类:

public class Assert extends java.lang.Object

这个类提供了一系列的编写测试的有用的声明方法。只有失败的声明方法才会被记录。Assert 类的重要方法列式,如下:

序号方法和描述
1void assertEquals(boolean expected, boolean actual) 检查两个变量或者等式是否平衡
2void assertFalse(boolean condition) 检查条件是假的
3void assertNotNull(Object object) 检查对象不是空的
4void assertNull(Object object) 检查对象是空的
5void assertTrue(boolean condition) 检查条件为真
6void fail() 在没有报告的情况下使测试不通过

下面让我们在例子中来测试一下上面提到的一些方法。

import org.junit.Test;
import static org.junit.Assert.*;
public class TestJunit1 {
@Test
public void testAdd() {
	//test data
	int num= 5;
	String temp= null;
	String str= "Junit is working fine";
	//check for equality
	assertEquals("Junit is working fine", str);
	//check for false condition
	assertFalse(num > 6);
	//check for not null value
	assertNotNull(str);
  }
}

运行测试套件键值处理模式

import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
public class TestRunner1 {
public static void main(String[] args) {
	Result result = JUnitCore.runClasses(TestJunit1.class);
	for (Failure failure : result.getFailures()) {
		System.out.println(failure.toString());
	}
    	System.out.println(result.wasSuccessful());
	}
}

TestCase 类

下面介绍的是 org.junit.TestCaset 类:

public abstract class TestCase extends Assert implements Test

测试样例定义了运行多重测试的固定格式。TestCase 类的一些重要方法列式如下:

序号方法和描述
1int countTestCases() 为被run(TestResult result) 执行的测试案例计数
2TestResult createResult() 创建一个默认的 TestResult 对象
3String getName() 获取 TestCase 的名称
4TestResult run() 一个运行这个测试的方便的方法,收集由TestResult 对象产生的结果
5void run(TestResult result) 在 TestResult 中运行测试案例并收集结果
6void setName(String name) 设置 TestCase 的名称
7void setUp() 创建固定装置,例如,打开一个网络连接
8void tearDown() 拆除固定装置,例如,关闭一个网络连接
9String toString() 返回测试案例的一个字符串表示

我们在例子中尝试一下上文提到的方法。

import junit.framework.TestCase;
import org.junit.Before;
import org.junit.Test;
public class TestJunit2 extends TestCase {
protected double fValue1;
protected double fValue2;
	@Before
	public void setUp() {
		fValue1= 2.0;
		fValue2= 3.0;
	}
    @Test
    public void testAdd() {
		//count the number of test cases
		System.out.println("No of Test Case = "+ 				
		this.countTestCases());
		//test getName
		String name= this.getName();
		System.out.println("Test Case Name = "+ name);
		//test setName
		this.setName("testNewAdd");
		String newName= this.getName();
		System.out.println("Updated Test Case Name = "+ newName);
  }	
  //tearDown used to close the connection or clean up 		activities
  public void tearDown( ) {
  }
}

接下来创建一个名为 TestRunner2.java 的类来执行测试案例。

import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
public class TestRunner2 {
public static void main(String[] args) {
   Result result = JUnitCore.runClasses(TestJunit2.class);
   for (Failure failure : result.getFailures()) {
     System.out.println(failure.toString());
   }
    System.out.println(result.wasSuccessful());
  }
}

检查输出结果。

No of Test Case = 1
Test Case Name = testAdd
Updated Test Case Name = testNewAdd
true

TestResult 类

下面定义的是 org.junit.TestResult 类:

public class TestResult extends Object

TestResult 类收集所有执行测试案例的结果。它是收集参数层面的一个实例。这个实验框架区分失败和错误。失败是可以预料的并且可以通过假设来检查。错误是不可预料的问题就像 ArrayIndexOutOfBoundsException。

TestResult 类的一些重要方法列式如下:

序号方法和描述
1void addError(Test test, Throwable t) 在错误列表中加入一个错误
2void addFailure(Test test, AssertionFailedError t) 在失败列表中加入一个失败
3void endTest(Test test) 显示测试被编译的这个结果
4int errorCount() 获取被检测出错误的数量
5Enumeration errors() 返回错误的详细信息
6int failureCount() 获取被检测出的失败的数量
7void run(TestCase test) 运行 TestCase
8void startTest(Test test) 声明一个测试即将开始
9void stop() 标明测试必须停止
10int runCount() 获得运行测试的数量

创建一个名为 TestJunit3.java 的类。

import org.junit.Test;
import junit.framework.AssertionFailedError;
import junit.framework.TestResult;
public class TestJunit3 extends TestResult {
   // add the error
	public synchronized void addError(Test test, Throwable t) {
		super.addError((junit.framework.Test) test, t);
	}
	// add the failure
	public synchronized void addFailure(Test test,AssertionFailedError t) {
		super.addFailure((junit.framework.Test) test, t);
	}
	@Test
	public void testAdd() {
		// add any test
	}
	// Marks that the test run should stop.
	public synchronized void stop() {
		//stop the test here
	}
}

接下来,创建一个名为 TestRunner3.java 的类来执行测试案例

import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
public class TestRunner3 {
public static void main(String[] args) {
    Result result = JUnitCore.runClasses(TestJunit3.class);
    for (Failure failure : result.getFailures()) {
      System.out.println(failure.toString());
    }
    System.out.println(result.wasSuccessful());
  }
}

现在运行 Test Runner 它将运行在 Test Case 类中定义并提供的测试样例,true。

TestSuite 类

下面定义的是 org.junit.TestSuite 类:

public class TestSuite extends Object implements Test

TestSuite 类是测试的组成部分。它运行了很多的测试案例。TestSuite 类的一些重要方法列式如下:

序号方法和描述
1void addTest(Test test) 在套中加入测试。
2void addTestSuite(Class<? extends TestCase> testClass) 将已经给定的类中的测试加到套中。
3int countTestCases() 对这个测试即将运行的测试案例进行计数。
4String getName() 返回套的名称。
5void run(TestResult result) 在 TestResult 中运行测试并收集结果。
6void setName(String name) 设置套的名称。
7Test testAt(int index) 在给定的目录中返回测试。
8int testCount() 返回套中测试的数量。
9static Test warning(String message) 返回会失败的测试并且记录警告信息。

创建一个名为 JunitTestSuite.java 的类。

import junit.framework.*;
public class JunitTestSuite {
public static void main(String[] a) {
  // add the test's in the suite
  TestSuite suite = new TestSuite(TestJunit1.class, TestJunit2.class, TestJunit3.class );
  TestResult result = new TestResult();
  suite.run(result);
  System.out.println("Number of test cases = " + result.runCount());
 }
}

现在运行 Test Suite,检查输出结果。

No of Test Case = 1
Test Case Name = testAdd
Updated Test Case Name = testNewAdd
Number of test cases = 3

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

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

相关文章

数字孪生:数字世界与现实世界的交汇

数字孪生是一种崭新的技术,指将现实世界中的物理实体、系统或过程通过数字化技术在虚拟数字世界中建立起虚拟模型。数字孪生可以帮助人们以更小的成本地理解和预测现实世界中的物理实体、系统或过程的行为和性能,从而提高生产效率、降低成本、减少风险等。 如今数字孪生技术…

Makerbase SimpleFOC ESP32 例程1 双电机开环速度测试

Makerbase SimpleFOC ESP32 例程1 双电机开环速度测试 第一部分 硬件介绍 1.1 硬件清单 序号品名数量1ESP32 FOC V1.0 主板12YT2804电机2312V电源适配器14USB 线1 注意&#xff1a;YT2804是改装的云台无刷电机,带有AS5600编码器&#xff0c;可实现360连续运转。 主要参数如…

刷题记录:双指针 | leetcode-1156. 单字符重复子串的最大长度 2023/6/3

1156. 单字符重复子串的最大长度 感觉这道题&#xff0c;双指针的思路很好想&#xff0c;但是要直接实现&#xff0c;对我而言还是有一些磕磕绊绊&#xff08;还是题做少了qaq&#xff09;。 思路是这样的&#xff0c;比如字符串序列为&#xff1a; aaabaaaba 那么一开始&am…

【leetcode】1156. 单字符重复子串的最大长度

1156. 单字符重复子串的最大长度 问题描述问题分析解决方案 问题描述 1156. 单字符重复子串的最大长度 如果字符串中的所有字符都相同&#xff0c;那么这个字符串是单字符重复的字符串。 给你一个字符串 text&#xff0c;你只能交换其中两个字符一次或者什么都不做&#xff…

基于AT89C52单片机的液晶多功能电子台历设计

点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/87858426 源码获取 第5章 液晶多功能电子台历的设计 5.1 功能要求 该项目以单片机STC89C54为核心,结合单线数字温度传感器DS18B20、时钟芯片DS1302和液晶显示器12864设计而…

GPU推理和端侧NPU推理的一处不同

端侧AI推理主要使用NPU完成,为了在性能,功耗和面积和通用性之间取得平衡,主流NPU采用了加速器架构,将算子固化在硬件中,并辅以可编程单元执行一些自定义算子/长尾算子兼顾灵活性。在计算方面,为了提高存储使用效率和加速计算,在满足计算精度的前提下,NPU普遍采用定点计…

编程的未来 - 还有未来么?

缘起 唐门教主上个月某天深夜写了一篇博客 --《编程的未来》&#xff0c;要我谈谈感想。 这也是最近软件工程师们聊得比较多的问题&#xff0c;上周&#xff0c;在上海的 “关东小磨” 和十多位 CSDN 博主聚会的时候&#xff0c;大家也稍微谈了一下这个话题&#xff0c;但是谈…

一哥们从小厂逆袭,涨薪50%,真是麻雀啄了牛屁股,雀食牛逼啊

前言 大多数情况下&#xff0c;软件测试人员的个人技能成长速度&#xff0c;远远大于公司规模或业务的成长速度。所以&#xff0c;跳槽成为了这个行业里最常见的一个词汇。 实际上&#xff0c;跳槽的目的无非是为了涨薪或是职业发展&#xff0c;我也不例外。普通本科毕业后&a…

vscode课程学习分析选课作业系统nodejs+vue

软件体系结构方案&#xff1a;由于本系统需要在不同设备上都能运行&#xff0c;而且电脑配置要求也要越低越好&#xff0c;为了实现这一要求&#xff0c;经过考虑B/S结构成为最佳之选。使用B/S结构的系统可以几乎在任何电脑上运行&#xff0c;只要浏览器可以正常工作就可以正常…

操作系统复习5.1.0-I/O管理

分类 按使用特性分 人机交互类&#xff1a;键盘、鼠标、打印机 存储设备&#xff1a;移动硬盘、光盘 网络通信设备&#xff1a;调制解调器 按速率分 低速设备&#xff1a;键鼠 中速设备&#xff1a;打印机 高速设备&#xff1a;磁盘 按信息交换单位分 块设备&#xff1a;…

yum和vim【Linux操作系统】

Linux软件包管理器 yum Linux安装软件&#xff1a; 源代码安装&#xff08;下载到程序的源代码&#xff0c;进行编译&#xff0c;得到可执行程序&#xff0c;太麻烦&#xff0c;因此有些人会将有些常用的软件提前编写好&#xff0c;做成软件包&#xff09; rpm安装&#xff08;…

BCD格式及与十进制/十六进制的转换

本文框架 前言1. BCD码是什么&#xff1f;2. 不同进制与BCD码之间的转换2.1 十进制与BCD码的转换2.1.1 十进制转换为BCD码2.1.2 BCD码转换为十进制 2.2 十六进制与BCD码的转换 前言 在诊断快照开发中会遇到保存年月日等使用BCD码格式的需求&#xff0c;本篇我们就一起看一下BC…

Sentinel监控微服务_流量控制_熔断降级_系统规则讲解

Sentinel 监控微服务 需求分析/图解 需求: 使用Sentinel 控制台对member-service-nacos-provider-10004 微服务进行实时监控 示意图 当调用了member-service-nacos-provider-10004 微服务时, 可以监控到请求的url/QPS/响应时间/流量 代码/配置实现 修改member-service-nac…

Redis之SDS数据结构的使用

目录 序言字符串 char*字符串数组简单动态字符串SDS 序言 Redis的几种基本数据结构有字符串&#xff08;String&#xff09;、哈希&#xff08;Hash&#xff09;、列表&#xff08;List&#xff09;、集合&#xff08;Set&#xff09;、有序集合&#xff08;Sorted Set&…

美国原装二手KEYSIGHT N8975A是德N8975B噪声系数分析仪

KEYSIGHT / AGILENT N8975A N8975B 噪声系数分析仪 Keysight N8975B 高性能噪声系数分析仪旨在进行快速、准确和可重复的噪声系数测量。它有一个多点触控界面&#xff0c;允许拉伸、捏合和拖动手势。大多数菜单都可以通过手指轻点来访问&#xff0c;而无需切换屏幕。通过允许…

【数据结构】第10周

目录 1.图的基本术语 2.图的存储 2.1邻接矩阵 2.2.邻接表 3.图的遍历 3.1 深度搜索 dfs 3.2 广度搜索 bfs 4.图的应用 4.1 最小生成树 4.1.1 普里姆算法 4.1.2 克鲁斯卡尔算法 4.2 最短路径 4.2.1 Dijkstra算法 4.2.2 Floyd算法 4.3 拓扑排序 4.4 关键路径 一些…

chatgpt赋能python:Python创建一个Animal类介绍

Python创建一个Animal类介绍 Python是一种高级编程语言&#xff0c;其简单易学、灵活性强、可读性高以及强大的库使得Python非常受欢迎。在Python中创建类非常容易且非常常见&#xff0c;我们可以使用Python创建各种类型的类。今天&#xff0c;我们将讨论如何使用Python创建一…

OpenAI发布最新研究让大模型数学推理直接达到SOTA

&#x1f989; AI新闻 &#x1f680; OpenAI发布最新研究&#xff1a;基于过程奖励的监督方法&#xff0c;让大模型数学推理直接达到SOTA 摘要&#xff1a;OpenAI最新研究基于GPT-4微调&#xff0c;采用过程监督和结果监督两种监督方法&#xff0c;奖励每个正确推理步骤的过程…

微信小程序开发实战 ⑨(TabBar)

作者 : SYFStrive 博客首页 : HomePage &#x1f4dc;&#xff1a; 微信小程序 &#x1f4cc;&#xff1a;个人社区&#xff08;欢迎大佬们加入&#xff09; &#x1f449;&#xff1a;社区链接&#x1f517; &#x1f4cc;&#xff1a;觉得文章不错可以点点关注 &#x1f4…

机器学习:基于XGBoost对信用卡欺诈行为的识别

机器学习&#xff1a;基于XGBoost对信用卡欺诈行为的识别 作者&#xff1a;i阿极 作者简介&#xff1a;Python领域新星作者、多项比赛获奖者&#xff1a;博主个人首页 &#x1f60a;&#x1f60a;&#x1f60a;如果觉得文章不错或能帮助到你学习&#xff0c;可以点赞&#x1f4…