Junit知识总结

JAVA自动化之Junit单元测试框架详解 一、JUnit概述&配置 1、Junit是什么? Junit是一个Java 编程语言的开源测试框架,用于编写和运行测试。官网 地址:https://junit.org/junit4/ 2、Maven配置 ?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4... 阅读详情

背景知识

JUnit 是针对Java 编程语言的最流行的单元测试框架。JUnit 在测试驱动的开发方面有很重要的发展,是起源于 JUnit 的一个统称为 xUnit 的单元测试框架之一。目前最新的Junit版本是Junit5,要求java8以上的版本。

什么是单元测试

所谓单元测试是测试应用程序的功能是否能够按需要正常运行的代码。单元测试是一个对单一实体(类或方法)的测试。
单元测试可以由两种方式完成:

人工测试自动测试
手动执行测试用例并不借助任何工具的测试被称为人工测试。
- 消耗时间并单调:由于测试用例是由人力资源执行,所以非常缓慢并乏味。
- 人力资源上投资巨大:由于测试用例需要人工执行,所以在人工测试上需要更多的试验员。
- 可信度较低:人工测试可信度较低是可能由于人工错误导致测试运行时不够精确。
- 非程序性的:编写复杂并可以获取隐藏的信息的测试的话,这样的程序无法编写。

借助工具支持并且利用自动工具执行用例被称为自动测试。
- 快速自动化运行测试用例时明显比人力资源快。 


- 人力资源投资较少:测试用例由自动工具执行,所以在自动测试中需要较少的试验员。
- 可信度更高:自动化测试每次运行时精确地执行相同的操作。
- 程式化的:试验员可以编写复杂的测试来显示隐藏信息。

Junit有下面这些特点:

  • JUnit 是一个开源框架,用于编写和运行测试。
  • 提供注释来识别测试方法。
  • 提供断言来测试预期结果。
  • 提供测试运行来运行测试。
  • JUnit 测试允许你编写代码更快,并能提高质量。
  • JUnit 优雅简洁。没那么复杂,花费时间较少。
  • JUnit 测试可以自动运行并且检查自身结果并提供即时反馈。所以也没有必要人工梳理测试结果的报告。
  • JUnit 测试可以被组织为测试套件,包含测试用例,甚至其他的测试套件。
  • JUnit 在一个条中显示进度。如果运行良好则是绿色;如果运行失败,则变成红色。

junit运行环境

JUnit 是 Java 的一个框架,所以只需要有java环境即可。

一个单元测试的用例是怎样的?

单元测试用例是代码的一部分,它确保代码的另一部分(方法)按预期工作。 

正式的书面单元测试用例的特征在于已知输入和预期输出,其在测试执行之前得出。 已知输入应测试前提条件,预期输出应测试后置条件。

每个需求必须至少有两个单元测试用例 - 一个是正面positive测试,一个是反面negative测试。 如果需求具有子需求,则每个子需求必须至少有两个测试用例为正面和负面。

Junit框架里的类

JUnit 中的最重要的程序包是 junit.framework 它包含了所有的核心类。其中比较常用的有下面这些:

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

使用断言

所有的断言都包含在 Assert 类中。这个类提供了很多有用的断言方法来编写测试用例。只有失败的断言才会被记录。Assert 类中的一些有用的方法列式如下:

序号方法和描述
1void assertEquals(boolean expected, boolean actual)
检查两个变量或者等式是否平衡
2void assertTrue(boolean expected, boolean actual)
检查条件为真
3void assertFalse(boolean condition)
检查条件为假
4void assertNotNull(Object object)
检查对象不为空
5void assertNull(Object object)
检查对象为空
6void assertSame(boolean condition)
assertSame() 方法检查两个相关对象是否指向同一个对象
7void assertNotSame(boolean condition)
assertNotSame() 方法检查两个相关对象是否不指向同一个对象
8void assertArrayEquals(expectedArray, resultArray)
assertArrayEquals() 方法检查两个数组是否相等

Junit方法执行过程

执行过程指的是JUnit 中的方法执行过程,即哪一个方法首先被调用,哪一个方法在一个方法之后调用。我们以下面的例子为例:

import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;

public class ExecutionProcedureJunit {

   //execute only once, in the starting 
   @BeforeClass
   public static void beforeClass() {
      System.out.println("in before class");
   }

   //execute only once, in the end
   @AfterClass
   public static void  afterClass() {
      System.out.println("in after class");
   }

   //execute for each test, before executing test
   @Before
   public void before() {
      System.out.println("in before");
   }

   //execute for each test, after executing test
   @After
   public void after() {
      System.out.println("in after");
   }

   //test case 1
   @Test
   public void testCase1() {
      System.out.println("in test case 1");
   }

   //test case 2
   @Test
   public void testCase2() {
      System.out.println("in test case 2");
   }
}

其执行结果如下:

in before class
in before
in test case 1
in after
in before
in test case 2
in after
in after class

观察以上的输出,JUnit执行过程如下:

  • beforeClass() 方法首先执行,并且只执行一次。
  • afterClass() 方法最后执行,并且只执行一次。
  • before() 方法针对每一个测试用例执行,但是是在执行测试用例之前。
  • after() 方法针对每一个测试用例执行,但是是在执行测试用例之后。
  • 在 before() 方法和 after() 方法之间,执行每一个测试用例。

套件测试

测试套件意味着捆绑几个单元测试用例并且一起执行他们。在 JUnit 中,@RunWith 和 @Suite 注释用来运行套件测试。

例子代码如下:

/*
* This class prints the given message on console.
*/
public class MessageUtil {

   private String message;

   //Constructor
   //@param message to be printed
   public MessageUtil(String message){
      this.message = message; 
   }

   // prints the message
   public String printMessage(){
      System.out.println(message);
      return message;
   }   

   // add "Hi!" to the message
   public String salutationMessage(){
      message = "Hi!" + message;
      System.out.println(message);
      return message;
   }   
}  
import org.junit.Test;
import org.junit.Ignore;
import static org.junit.Assert.assertEquals;

public class TestJunit1 {

   String message = "Robert";   
   MessageUtil messageUtil = new MessageUtil(message);

   @Test
   public void testPrintMessage() { 
      System.out.println("Inside testPrintMessage()");    
      assertEquals(message, messageUtil.printMessage());     
   }
}
import org.junit.Test;
import org.junit.Ignore;
import static org.junit.Assert.assertEquals;

public class TestJunit2 {

   String message = "Robert";   
   MessageUtil messageUtil = new MessageUtil(message);

   @Test
   public void testSalutationMessage() {
      System.out.println("Inside testSalutationMessage()");
      message = "Hi!" + "Robert";
      assertEquals(message,messageUtil.salutationMessage());
   }
}

在上面的代码当中我们创建了两个测试类,分别是TestJunit1以及TestJunit2。接着我们按照下面步骤创建TestSuite

  • 创建一个 java 类。
  • 在类中附上 @RunWith(Suite.class) 注释。
  • 使用 @Suite.SuiteClasses 注释给 JUnit 测试类加上引用。
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
@RunWith(Suite.class)
@Suite.SuiteClasses({
   TestJunit1.class,
   TestJunit2.class
})
public class JunitTestSuite {   
} 

此时我们就可以一起运行这两个测试类。

忽略测试

有时可能会发生我们的代码还没有准备好的情况,这时测试用例去测试这个方法或代码的时候会造成失败。@Ignore 注释会在这种情况时帮助我们。

  • 一个含有 @Ignore 注释的测试方法将不会被执行。
  • 如果一个测试类有 @Ignore 注释,则它的测试方法将不会执行。

下面是一个使用@Ignore的例子

import org.junit.Test;
import org.junit.Ignore;
import static org.junit.Assert.assertEquals;

@Ignore
public class TestJunit {

   String message = "Robert";   
   MessageUtil messageUtil = new MessageUtil(message);

   @Test
   public void testPrintMessage() {
      System.out.println("Inside testPrintMessage()");
      message = "Robert";
      assertEquals(message,messageUtil.printMessage());
   }

   @Test
   public void testSalutationMessage() {
      System.out.println("Inside testSalutationMessage()");
      message = "Hi!" + "Robert";
      assertEquals(message,messageUtil.salutationMessage());
   }
}

异常测试

Junit 提供了一个追踪异常的选项。可以测试代码是否它抛出了想要得到的异常。方法是将expected 参数和 @Test 注释一起使用。

例子如下:

import org.junit.Test;
import org.junit.Ignore;
import static org.junit.Assert.assertEquals;

public class TestJunit {

   String message = "Robert";   
   MessageUtil messageUtil = new MessageUtil(message);

   @Test(expected = ArithmeticException.class)
   public void testPrintMessage() { 
      System.out.println("Inside testPrintMessage()");     
      messageUtil.printMessage();     
   }

   @Test
   public void testSalutationMessage() {
      System.out.println("Inside testSalutationMessage()");
      message = "Hi!" + "Robert";
      assertEquals(message,messageUtil.salutationMessage());
   }
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

 

 

 

 

 

单元测试之JUnit5知识点总结及代码示例 本文主要是复习和比较全面总结Java单元测试框架JUnit5的知识点及用法,表格总结用法以及给出了对应的简单代码示例。更深入的用法还可以参考JUnit5的官方github仓库示例 阅读详情

相关推荐

Oracle19c SYSAUX表空间爆满?手把手教你清理SM/ADVISOR和AUDSYS占用(附完整SQL)

本文详细解析了Oracle19c中SYSAUX表空间爆满的常见原因及解决方案,重点针对SM/ADVISOR和AUDSYS组件的空间占用问题提供了完整的SQL清理脚本。通过诊断查询、空间清理和预防性维护策略,帮助DBA有效管理SYSAUX表空间,确保数据库稳定运行。

weixin_28338005的博客 243

【软件测试】单元测试工具---Junit详解

虽然我们已经学习了selenium测试框架,但是有的时候测试用例很多,我们需要一个测试工具来管理这些测试用例,Junit就是一个很好的管理工具,简单来说Junit是一个针对Java单元测试的框架。(test suite)有时也称为验证套件(validation suite),是许多测试用例的集合,测试用例可用来测试一程式是否正确工作,测试套件包括许多测试用例,一般也会有针对测试用例及其测试目的的详细说明,在进行测试时的系统组态资讯以及测试前需进行的步骤。有人觉得junit的测试顺序是从上到下的,是这样吗?

m0_57248752的博客 1万+

UE5 AI寻路全攻略:从Nav Mesh基础到动态障碍与多模式导航

在游戏开发中,AI寻路是赋予非玩家角色自主移动能力的关键技术。其核心原理是通过预计算或实时生成一个表示可行走区域的导航网格,AI路径查找算法(如A*)在此网格上规划最优路径。这项技术的价值在于,它能极大提升游戏世界的真实感和交互性,使NPC能够智能地绕开障碍、穿越复杂地形,广泛应用于开放世界、RPG、策略游戏等多种场景。本文聚焦于虚幻引擎5的寻路系统,深入探讨其寻路网格体配置。针对动态环境挑战,文章详细介绍了如何利用寻路修饰体积和动态障碍物组件实现导航网格的实时更新;同时,针对游泳、飞行等特殊移动需求,解析

weixin_33226816的博客 362

JUnit4 / JUnit 5 全面详解【单元测试、Maven】

JUnit4 / JUnit 5 全面详解【单元测试、Maven】

青年有志 1万+

【可信数据空间-连接器技术架构设计方案】

一句话概括连接器是可信数据空间的“数据保镖”和“外交官”。连接器就是一个部署在你本地的软件代理,它代表你安全地对外提供数据服务,确保在共享数据价值的同时,牢牢守住数据的所有权和控制权。它是实现“数据可用不可见”这一理想的关键技术部件。一个生动的比喻:银行的金库和接待员想象一下,你的数据就是藏在银行金库里的黄金和钞票。金库(你的内部数据库): 绝对安全,外人绝对不能进。接待员(连接器): 坐在银行大厅里,负责与客户打交道。客户向接待员提出请求:“我想取1000元。

u014716614的博客 2274

论文精读-ReTransformer ReRAM-based Processing-in-MemoryArchitecture for Transformer Acceleration

Transformer已经成为一种流行的深度神经网络(DNN)模型,用于神经语言处理(NLP)应用,并在神经机器翻译、实体识别等方面表现出优异的性能。然而,其在自回归解码器中的规模化点积注意机制在推理过程中带来了性能瓶颈。Transformer也是计算和内存密集型的,需要硬件加速解决方案。

a284365的博客 1923

【软件测试】JUnit详解

它提供了一组注解和断言方法,以及用于执行测试的测试运行器。通过使用JUnit,开发人员可以轻松地编写自动化测试用例,验证代码的正确性,并且能够快速地发现和修复bug。JUnit的使用可以提高代码的质量和可维护性,同时也有助于进行持续集成和持续测试。上述表格中,其中黑体为常用的注解,也是接下来主要介绍说明的注解.注解并指定一个整数值,可以确保测试方法按照指定的顺序执行。中用来指定测试方法执行的顺序的注解。测试套件是一种组织和执行一组测试的方式。:在所有测试方法之后执行,只会执行一次。

xxxflower的博客 9138

如何正确的计算两个角度的角度差?

这一步是必要的,因为它确保了无论a相对于b是在逆时针方向还是顺时针方向,d2总是正确地反映出绕圆相反方向的角度差。这样,当函数进行最后的比较时,它能够准确地比较两个方向的旋转路径并选择最短的一个。

小秋 AI SLAM 入门实战教程 4139

Junit 入门使用教程

1、Junit 是什么?   JUnit是一个Java语言的单元测试框架。它由Kent Beck和Erich Gamma建立,逐渐成为源于Kent Beck的sUnit的xUnit家族中最为成功的一个JUnit有它自己的JUnit扩展生态圈。多数Java的开发环境都已经集成了JUnit作为单元测试的工具。   注意:Junit 测试也是程序员测试,即所谓的白盒测试,它需要程序员知道被测试的代码...

weixin_33976072的博客 3162

在 SAP 中修改 Profile 文件中的主机名需要谨慎操作,需需确保所有相关配置保持一致

在SAP系统中修改Profile文件主机名需谨慎操作,主要步骤包括:1)停止相关SAP服务;2)重命名并编辑实例级Profile文件(如ER1_D00_OLDHOST改为ER1_D00_LRPSAP),修改所有含旧主机名的参数;3)可选更新默认Profile文件;4)在Windows系统中调整注册表配置;5)验证一致性后重启服务。关键注意:保持大小写统一、修改前备份文件、集群环境需同步所有节点。通过系统日志确认新主机名生效且无报错。

金牌架构师 1052

基于STM32、HAL库的MCP4651-503E/ST数字电位器驱动程序设计

@param channel: 通道 (0: A通道, 1: B通道)* @param channel: 通道 (0: A通道, 1: B通道)// SPI1 SCK/MISO/MOSI引脚配置。* @param hmcp: MCP4651句柄。* @param hmcp: MCP4651句柄。* @param hmcp: MCP4651句柄。* @param hmcp: MCP4651句柄。* @param hmcp: MCP4651句柄。* @param hspi: SPI句柄。

corlin6688的博客 137

Java中JUnit知识点

JUnit 是 Java 中最常用的单元测试框架,用于编写和运行可重复的测试。

hqxstudying的博客 1037

霜冰优化算法(RIME)详解:从自然现象到智能优化

霜冰优化算法(RIME)是一种新型元启发式优化算法,灵感源于自然界中霜冰的形成过程。该算法通过模拟软霜和硬霜的不同生长特性,实现了高效的全局探索和局部开发平衡。RIME算法包含三个核心机制:软霜搜索策略模拟随机覆盖特性实现全局探索;硬霜穿刺机制模拟定向生长特性进行局部开发;正向贪婪选择机制确保解的持续优化。与遗传算法、粒子群算法相比,RIME具有参数少、收敛快、自适应平衡等优势,特别适合处理高维复杂优化问题。算法已在工程优化、机器学习等领域获得广泛应用,发表一年内即成为高被引论文。

qq_42212808的博客 787

Junit 是什么,具体有哪些知识点,模拟一个Springboot 项目中使用的junit的测试

Junit 是什么,具体有哪些知识点,模拟一个Springboot 项目中使用的junit的测试

weixin_45428910的博客 1249

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

JUnit基础知识和使用

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33974433的博客 233

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

android单元测试-JUnit框架的使用-基础知识

Assert类中主要方法如下: 方法名 方法描述 assertEquals 断言传入的预期值与实际值是相等的 assertNotEquals 断言传入的预期值与实际值是不相等的 assertArrayEquals 断言传入的预期数组与实际数组是相等的 assertNull 断言传入的对象是为空 assertNotNull 断言传入的对象是...

xie__jin__cheng的博客 309

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

JUnit基础知识

JUnit是一个Java语言的单元测试框架。JUnit是白盒测试,因为程序员知道被测试的软件如何(How)完成功能和完成什么样(What)的功能。 JUnit3: 测试类必须继承类TestCase。 测试方法必须以test开头(如:testAdd())。 setUp():实现测试前的初始化工作。 tearDown():实现测试后的垃圾回收等工作。 **需要注意的是,JUnit3中每个测

Peddy's Blog 633

关于Junit的必备知识

Junit的基本使用(详解) 2.Junit4 模拟requert请求进行测试

weixin_42206151的博客 206

Junit相关知识整理

Junit单元测试相关知识整理 junit4 的使用 a)        @ BeforeClass 在整个测试执行之前执行,所属方法必须是 static void 类型;一般用于加载大型文件或者类,以及整个测试用例执行的环境搭建; b)        @ Before 在每一个测试用例执行之前执行,所属方法必须是void类型;一般用于小型文件的加载或者对象的实例化; c)        

u010046296的专栏 571

JUnit5知识总结

JUnit5知识总结

qq_62636613的博客 296

Junit知识

junit   JUnit是由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架(regression testing framework)。Junit测试是程序员测试,即所谓白盒测试,因为程序员知道被测试的软件如何(How)完成功能和完成什么样(What)的功能。Junit是一套框架,继承TestCase类,就可以用Junit进行自动测试了。  JUnit是一个开发源代码...

iteye_15105的博客 94

Java小知识——Junit、反射、注解

前言 有几个知识点,我一直很模糊、很欠缺,现在开始重新学习一下 Junit JUnit是一个Java语言的单元测试框架。 测试分类 对于程序的测试,我们一般分成两类: 黑盒测试:不需要写代码,给输入值,看程序是否能够输出期望值 白盒测试:需要写代码的。关注程序具体的执行流程 Junit 的使用 我们的单元测试属于白盒测试。 今天我们来学习Java中的单元测试——JUnit 我们以往对代码的测试是怎么做呢? 一般都是如下吧: public clas...

#的博客 1423

JUnit以及注解基本知识点

一,使用JUnit必须注意的几点 1.必须是无参数void返回类型的非静态方法 2.使用JUnit的类必须拥有一个无参的公开构造方法 二,其他注解 @BeforeClass – 在测试时只运行一次。必须加在static方法-不可以单独运行,在运行整个类时有可能会出错。 @AfterClass – 在测试结束时只运行一次。static方法。 @Before– 每个测试方法运行一次。必

菇凉当自强的博客 746

JUnit4 知识小结

JUnit4 知识小结 java单元测试——JUnit4 JUnit是一个简单的框架,用于编写可重复的测试。它是单元测试框架的xUnit架构的一个实例。 package com.imooc.util; import static org.junit.Assert.*; import org.junit.Test; public class CalculateTest {

Rocky_Zhang1993的博客 451
上一篇: rabbitmq基础知识介绍及总结
下一篇: CRM知识总结
topEngineerr
博客等级 码龄11年 627粉丝 157原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值