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

news/2024/11/18 0:37:20/

手把手+零基础带你玩转单元测试,让你的代码更加“强壮”(核心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 dataint num= 5;String temp= null;String str= "Junit is working fine";//check for equalityassertEquals("Junit is working fine", str);//check for false conditionassertFalse(num > 6);//check for not null valueassertNotNull(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;@Beforepublic void setUp() {fValue1= 2.0;fValue2= 3.0;}@Testpublic void testAdd() {//count the number of test casesSystem.out.println("No of Test Case = "+ 				this.countTestCases());//test getNameString name= this.getName();System.out.println("Test Case Name = "+ name);//test setNamethis.setName("testNewAdd");String newName= this.getName();System.out.println("Updated Test Case Name = "+ newName);}	//tearDown used to close the connection or clean up 		activitiespublic 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 errorpublic synchronized void addError(Test test, Throwable t) {super.addError((junit.framework.Test) test, t);}// add the failurepublic synchronized void addFailure(Test test,AssertionFailedError t) {super.addFailure((junit.framework.Test) test, t);}@Testpublic 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 suiteTestSuite 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.ppmy.cn/news/184433.html

相关文章

使用Yolov5实现智能垃圾分类系统

简介&#xff1a; 在这篇博客中&#xff0c;我们将详细介绍如何使用Yolov5构建智能垃圾分类系统&#xff0c;从数据准备到模型部署的全过程。为大家提供有关Yolov5在实际项目中应用的思路和方法。 目录 简介&#xff1a; **1. 背景与挑战** **1.1 垃圾分类的环保意义** *…

超薄型外置光驱导购

松下PDR001A 该产品的体积为143MM*143MM*21MM,重量为0.35KG,只需要USB接口即可满足供电要求,拥有2MB缓存容量,支持8*DVDR写入,4*DVDR DL写入,8*DVDRW复写,6*DVD-R复写和5*DVD-RAM写入. 三星SE-S084B 自带2MB缓存,支持8*DVDR读写,8*DVDRW读写,6*DVD-RW复写,6*DVDR DL写入和6*…

光盘刻录

光盘刻录 数字CD刻录主要的用途是备份硬盘数据或制作某些游戏、软件的安装盘&#xff0c;是刻录机最常使用的功能。德国Ahead Software公司出品的Nero是数字CD刻录最常用也是功能最强的软件之一&#xff0c;目前最新版本为5.5.9.0&#xff0c;大小为12274kB&#xff0c;是一个共…

光驱重装系统教程

光驱重装系统是使用最长的系统安装方法&#xff0c;最早时候电脑都有光驱的&#xff0c;很多用户重装电脑系统的时候都会使用光驱重装系统&#xff0c;现在小编来为大家详细的介绍一下光驱重装系统的教程。 工具/原料&#xff1a; 系统版本&#xff1a;win7系统 品牌型号&#…

「光驱」先锋 DVR-111XL 刻录

先锋 DVR-111XL 主要性能 类别内置 类型DVDRW/DVD-RAM DVD最大擦写倍速8X DVD擦写倍速描述5X DVD-RAM刻录,6X DVD-RW覆写、8X DVDRW覆写 DVD最大刻录倍速16X DVD刻录倍速描述16X DVD/-R写入、8X DVD/-R DL写入 DVD最大读取倍速16X CD-RW擦写倍速32X CD-R写入倍速40X C…

激光驱鸟器

激光驱鸟器 一、1.系统功能二、工作原理三、技术参数四、系统组成五、安装方式六、应用案例七、联系方式 一、1.系统功能 电网建设&#xff0c;分布在全国各地&#xff0c; 自然环境多样&#xff0c; 鸟类食物丰富&#xff0c; 为许多鸟类栖息、 繁殖或越冬提供了良好条件&…

计算机主机的安装视频,台式电脑光驱怎么安装 电脑光驱的安装图解

光驱对于电脑来说是急救箱的作用&#xff0c;尤其是在系统崩溃的时候&#xff0c;电脑并不能启动&#xff0c;只有通过光驱进行系统的重新安装&#xff0c;但很多人对于电脑光驱的安装不是很熟悉&#xff0c;那么问题来了&#xff0c;台式电脑光驱怎么安装&#xff1f;下面大家…

kibana中ES修改某个字段类型问题

近日&#xff0c;发现同步数据到es的时候&#xff0c;有个新建的索引动态适配了mapping&#xff0c;而往往这种会有字段类型不是我们想要的&#xff0c;比如我这就有个tid字段&#xff0c;此字段要在聚合操作中使用&#xff0c;而此时的tid被识别成text类型了&#xff0c;而tex…