JUnit单元测试框架由Erich Gamma和Kent Beck编写的一个回归测试框架(Regresion Testing Framework),主要用于Java语言程序的单元测试,目前使用的主流版本是JUnit以上版本。

安装JUnit5累(IDEA)

以一个简单的程序为例:

public class Main {public static long fact(long n) {//实现阶乘long r = 1;for (long i = 1; i <= n; i++) {r = r * i;}return r;}
}

1.点击类名,并且点击Generate,再选择Test

2.可能会出现以下情况,点击Fix,IDEA帮助你下载好JUnit5(点击OK就行)

3.以后出现就是这样的 选择自己需要进行测试的方法打勾(可以将setup 和tearDown打上勾)

一个测试类中只能声明此注解一次,此注解对应的方法只能被执行一次

@BeforeClass 使用此注解的方法在测试类被调用之前执行

@AfterClass 使用此注解的方法在测试类被调用结束退出之前执行

一个类中有多少个@Test注解方法,以下对应注解方法就被调用多少次

@Before 在每个@Test调用之前执行

@After 在每个@Test调用之后执行(一般用于初始化或者清除)

@Test 使用此注解的方法为一个单元测试用例,一个测试类中可多次声明,每个注解为@Test只执行一次

@Ignore 暂不执行的测试用例,会被JUnit4忽略执行

4.会自动生成

内容如下:(testFact()里面的内容是自己写的测试程序)

然后我们可以直接点击testFact(),右键直接运行,看输出效果就行。

核心测试方法testFact()加上了@Test注解,这是JUnit要求的,它会把带有@Test的方法识别为测试方法。在测试方法内部,我们用assertEquals(1, Factorial.fact(1))表示,期望Factorial.fact(1)返回1assertEquals(expected, actual)是最常用的测试方法,它在Assertion类中定义。Assertion还定义了其他断言方法,例如:

  • assertTrue(): 期待结果为true

  • assertFalse(): 期待结果为false

  • assertNotNull(): 期待结果为非null

  • assertArrayEquals(): 期待结果为数组并与期望数组每个元素的值均相等

单元测试的好处

单元测试可以确保单个方法按照正确预期运行,如果修改了某个方法的代码,只需确保其对应的单元测试通过,即可认为改动正确。此外,测试代码本身就可以作为示例代码,用来演示如何调用该方法。

使用JUnit进行单元测试,我们可以使用断言(Assertion)来测试期望结果,可以方便地组织和运行测试,并方便地查看测试结果。此外,JUnit既可以直接在IDE中运行,也可以方便地集成到Maven这些自动化工具中运行。

在编写单元测试的时候,我们要遵循一定的规范:

一是单元测试代码本身必须非常简单,能一下看明白,决不能再为测试代码编写测试;

二是每个单元测试应当互相独立,不依赖运行的顺序;

三是测试时不但要覆盖常用测试用例,还要特别注意测试边界条件,例如输入为0null,空字符串""等情况。

下面解释一下@Before 在每个@Test调用之前执行 和 @After 在每个@Test调用之后执行的用途

JUnit提供了编写测试前准备、测试后清理的固定代码,称之为Fixture。(新建立一个.java)

public class Calculator {private long n = 0;public long add(long x) {n = n + x;return n;}public long sub(long x) {n = n - x;return n;}
}

将Before和After前面的勾都选择上,然后写上自己的测试程序。

public class CalculatorTest {Calculator calculator;@BeforeEachpublic void setUp() {this.calculator = new Calculator();}@AfterEachpublic void tearDown() {this.calculator = null;}@Testvoid testAdd() {assertEquals(100, this.calculator.add(100));assertEquals(150, this.calculator.add(50));assertEquals(130, this.calculator.add(-20));}@Testvoid testSub() {assertEquals(-100, this.calculator.sub(100));assertEquals(-150, this.calculator.sub(50));assertEquals(-130, this.calculator.sub(-20));}
}

有两个标记为@BeforeEach@AfterEach的方法,它们会在运行每个@Test方法前后自动运行,通过@BeforeEach来初始化,通过@AfterEach来清理资源,称之为Fixture。

上面的测试代码在JUnit中运行顺序如下:

for (Method testMethod : findTestMethods(CalculatorTest.class)) {var test = new CalculatorTest(); // 创建Test实例invokeBeforeEach(test);invokeTestMethod(test, testMethod);invokeAfterEach(test);
}//可见,@BeforeEach和@AfterEach会“环绕”在每个@Test方法前后。

JUnit还提供了@BeforeAll@AfterAll,它们在运行所有@Test前后运行,顺序如下:(一般用于初始化和清理一些比较繁琐的资源)(了解)

invokeBeforeAll(CalculatorTest.class);
for (Method testMethod : findTestMethods(CalculatorTest.class)) {var test = new CalculatorTest(); // 创建Test实例invokeBeforeEach(test);invokeTestMethod(test, testMethod);invokeAfterEach(test);
}
invokeAfterAll(CalculatorTest.class);

因为@BeforeAll@AfterAll在所有@Test方法运行前后仅运行一次,因此,它们只能初始化静态变量,例如:

public class DatabaseTest {static Database db;@BeforeAllpublic static void initDatabase() {db = createDb(...);}@AfterAllpublic static void dropDatabase() {...}
}

总结:

  1. 对于实例变量,在@BeforeEach中初始化,在@AfterEach中清理,它们在各个@Test方法中互不影响,因为是不同的实例;

  2. 对于静态变量,在@BeforeAll中初始化,在@AfterAll中清理,它们在各个@Test方法中均是唯一实例,会影响各个@Test方法。

  3. 注意到每次运行一个@Test方法前,JUnit首先创建一个XxxTest实例,因此,每个@Test方法内部的成员变量都是独立的,不能也无法把成员变量的状态从一个@Test方法带到另一个@Test方法。

IDEA中使用JUnit5(单元测试框架)相关推荐

  1. JUnit5单元测试框架的使用教程与简单实例

    1.JUnit5的使用教程 1.1 简介 JUnit是一个Java语言的单元测试框架.它由Kent Beck和Erich Gamma建立,逐渐成为源于Kent Beck的sUnit的xUnit家族中最 ...

  2. W2-2:在Maven项目中进行Junit5单元测试

    系列文章目录 W2-1:Maven引入外部依赖--以GSON的使用为例 W2-2:在Maven项目中进行Junit5单元测试 - 环境:IntelliJ IDEA Community Edition ...

  3. python单元测试框架作用_Python自动单元测试框架

    简介: 软件的测试是一件非常乏味的事情,在测试别人编写的软件时尤其如此,程序员通常都只对编写代码感兴趣,而不喜欢文档编写和软件测试这类"没有创新"的工作.既然如此,为什么不让程序员 ...

  4. Python自动单元测试框架

    软件的测试是一件非常乏味的事情,在测试别人编写的软件时尤其如此,程序员通常都只对编写代码感兴趣,而不喜欢文档编写和软件测试这类"没有创新"的工作.既然如此,为什么不让程序员在编写软 ...

  5. android集成测试框架,Android单元测试框架选择

    Android单元测试介绍 处于高速迭代开发中的Android项目往往需要除黑盒测试外更加可靠的质量保障,这正是单元测试的用武之地.单元测试周期性对项目进行函数级别的测试,在良好的覆盖率下,能够持续维 ...

  6. Java单元测试框架与实践(Junit5 + Mockito)

    Java单元测试框架与实践 本文首先在理论上归纳了单元测试在宏观和微观层面要遵循的基本原则,以及测试覆盖率的要求和评价维度.然后具体阐述了笔者实战中总结的基于Junit + Mockito 的单元测试 ...

  7. 单元测试框架——Junit5

    文章目录 1.什么是单元测试 2.了解junit5 3.常用注解 4.断言 4.1.什么是断言 4.2.常用断言 5.用例执行顺序 6.测试套件Suite 7.参数化 1.什么是单元测试 单元测试是对 ...

  8. 单元测试框架怎么搭?快来看看新版Junit5的这些神奇之处吧!

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 为什么使用JUnit5 JUnit4被广泛使用,但是许多场 ...

  9. 使用外部同步的 Boost.Test 调用在 MT 环境中测试单元测试框架的可用性

    使用外部同步的 Boost.Test 调用在 MT 环境中测试单元测试框架的可用性 实现功能 C++实现代码 实现功能 使用外部同步的 Boost.Test 调用在 MT 环境中测试单元测试框架的可用 ...

最新文章

  1. 中小企业IT不可错过的十大虚拟机软件
  2. 烂泥:mysql帮助命令使用说明
  3. UGUI与NGUI的区别汇总
  4. better-scroll 上拉加载,下拉刷新(解决移动端长页面卡顿)
  5. metasploitable2渗透测试
  6. 硬盘全新安装windows 7
  7. python黑网站_Python简单实现HTTP本地代理转发
  8. linux 常用压缩格式,Linux常见压缩格式之压缩与解压
  9. ViT (Vision Transformer) ---- Vision Transformer
  10. eclipse svn设置忽略文件
  11. 测试视频软件支持的格式,支持82种视频格式!电视平台最强的本地播放器!
  12. 云计算行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  13. FPGA实现1位全加器设计
  14. 电子书各种格式的转换常见问题
  15. 什么叫工业4.0,这篇接地气的文章终于讲懂了(ZT)
  16. 关于举办“2021全国高校计算机视觉实战暑期教师研修班”的通知
  17. php artisan命令表,php artisan 命令列表
  18. [CODEVS3032]摆放球 解题报告
  19. 适配 iPhone13、iPhone13 pro、iPhone13 proMax
  20. CHK文件丢失怎么办?chk文件恢复技巧就看这一个!

热门文章

  1. java官网以及java官网下载地址
  2. python从零开始爬东方财富网
  3. Java导出PDF样式详细解析(步骤+代码)
  4. 【CVPR2021】【语义编辑】SeFa(Closed-Form Factorization of Latent Semantics in GANs)论文分析
  5. Android之内存泄漏调试学习与总结
  6. Spring Boot教程(三十四)使用Redis数据库(2)
  7. 【莫问前路】数据结构篇 绪论
  8. “随机漫步”(Random Walk)模拟演示
  9. 计算机毕业设计php公文审批系统-办公系统
  10. 【RFC2663 IP 网络地址转换器 (NAT) 术语和注意事项】(翻译)