使用JUnit进行单元测试

简介: 简介 JUnit 是一个 Java 编程语言的单元测试框架。JUnit 在测试驱动的开发方面有很重要的发展,是起源于 JUnit 的一个统称为 xUnit 的单元测试框架之一。 好处 可以书写一系列的测试方法,对项目所有的接口或者方法进行单元测试。
+关注继续查看

简介

JUnit 是一个 Java 编程语言的单元测试框架。JUnit 在测试驱动的开发方面有很重要的发展,是起源于 JUnit 的一个统称为 xUnit 的单元测试框架之一。

好处

  1. 可以书写一系列的测试方法,对项目所有的接口或者方法进行单元测试。
  2. 启动后,自动化测试,并判断执行结果, 不需要人为的干预。
  3. 只需要查看最后结果,就知道整个项目的方法接口是否通畅。
  4. 每个单元测试用例相对独立,由Junit 启动,自动调用。不需要添加额外的调用语句。
  5. 添加,删除,屏蔽测试方法,不影响其他的测试方法。 开源框架都对JUnit 有相应的支持。

环境配置

从官网http://www.junit.org 下载 JUnit 最新版本的压缩文件。

笔者使用Maven(Java包管理工具)导入所需要的jar包:

<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope>
</dependency>

基本用法

测试代码和生成代码分开放置,Maven默认目录正好符号这个要求。
代码目录

被测试代码放在main下的java目录中,junit测试代码放在test下的java目录中,形成一一对应关系,测试代码使用Test开头命名。

被测试MessageDemo代码:
MessageDemo

测试TestMessageDemo代码:
MessageDemo

基本的已经写好了,但是如何运行测试呢?
还需要建一个运行测试的文件:
MessageDemo

好了,运行测试:
控制台输出

看到true表明测试成功,那么我们来尝试一下测试不成功是什么情况。

修改TestMessageDemo代码:
TestMessageDemo

重新运行测试:
控制台输出

测试结果为false,并且指明了期望输出的结果No和实际输出的结果HelloWorld

JUnit 断言

什么是断言?刚开始我也很困惑,后来搞了大半天才明白断言就是"判断"。

Junit所有的断言都包含在 Assert 类中。

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

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

JUnit 注解

  1. @Test:这个注释说明依附在 JUnit 的 public void 方法可以作为一个测试案例。
  2. @Before:有些测试在运行前需要创造几个相似的对象。在 public void 方法加该注释是因为该方法需要在 test 方法前运行。
  3. @After:如果你将外部资源在 Before 方法中分配,那么你需要在测试运行后释放他们。在 public void 方法加该注释是因为该方法需要在 test 方法后运行。
  4. @BeforeClass:在 public void 方法加该注释是因为该方法需要在类中所有方法前运行。
  5. @AfterClass:它将会使方法在所有测试结束后执行。这个可以用来进行清理活动。
  6. @Ignore:这个注释是用来忽略有关不需要执行的测试的。

JUnit 加注解执行过程

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

JUnit 执行测试

测试用例是使用 JUnitCore 类来执行的。JUnitCore 是运行测试的外观类。要从命令行运行测试,可以运行java org.junit.runner.JUnitCore。对于只有一次的测试运行,可以使用静态方法 runClasses(Class[])

JUnit 套件测试

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

被测试MessageDemo代码:
MessageDemo

新建两个测试类,用来展示套件测试:

测试TestMessageDemo代码:
MessageDemo

测试TestMessageDemo2代码:
TestMessageDemo2

TestSuite代码:
carbon (1).png

TestRunner代码:
carbon (2).png

测试结果:
控制台输出

通过这样的方式,我们就可以一次运行多个测试了,看起来也不是很复杂哦!

JUnit 时间测试

如果一个测试用例比起指定的毫秒数花费了更多的时间,那么 Junit 将自动将它标记为失败。timeout 参数和 @Test 注释一起使用。是不是很强大?

就像这样:

@Test(timeout=1000)

时间单位是毫秒。

JUnit 异常测试

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

比如这样:

@Test(expected = ArithmeticException.class)

JUnit 参数化测试

Junit 4 引入了一个新的功能参数化测试。参数化测试允许开发人员使用不同的值反复运行同一个测试。你将遵循 5 个步骤来创建参数化测试。

  • @RunWith(Parameterized.class) 来注释 test 类。
  • 创建一个由 @Parameters 注释的公共的静态方法,它返回一个对象的集合(数组)来作为测试数据集合。
  • 创建一个公共的构造函数,它接受和一行测试数据相等同的东西。
  • 为每一列测试数据创建一个实例变量。
  • 用实例变量作为测试数据的来源来创建你的测试用例。

一旦每一行数据出现测试用例将被调用。

参数化测试例子

被测试代码PrimeNumberChecker:
PrimeNumberChecker

测试代码TestPrimeNumberChecker
TestPrimeNumberChecker

测试运行代码TestRunner
TestRunner

测试运行结果:
控制台输出

相关文章
|
16天前
|
测试技术
Junit单元测试
Junit单元测试
15 0
|
1月前
|
Java 测试技术
Java中JUnit单元测试
Java中JUnit单元测试
27 0
|
1月前
|
Java 测试技术 程序员
Junit单元测试
Junit单元测试
|
1月前
|
Java 测试技术
JUnit单元测试依赖包构建路径错误解决办法
JUnit单元测试依赖包构建路径错误解决办法
|
3月前
|
Java 测试技术 Spring
Mockito + Junit + SpringBoot进行单元测试
Mockito + Junit + SpringBoot进行单元测试
96 0
|
4月前
|
druid Java 数据库连接
Spring整合Mybatis&Junit单元测试
Spring整合Mybatis&Junit单元测试
|
5月前
|
Java 测试技术
单元测试_JUnit常用单元测试注解介绍及代码演示 2
单元测试_JUnit常用单元测试注解介绍及代码演示
56 0
|
5月前
|
Java 测试技术 数据库连接
单元测试_JUnit常用单元测试注解介绍及代码演示 1
单元测试_JUnit常用单元测试注解介绍及代码演示
71 0
|
7月前
|
Java 测试技术 开发者
Junit单元测试框架【基础篇】
Junit单元测试框架【基础篇】
Junit单元测试框架【基础篇】
|
7月前
|
Java 测试技术 Maven
【高效编码】超全面的,超正的单元测试框架Junit的使用姿势
您好,我是码农飞哥,感谢您阅读本文!如果此文对您有所帮助,请毫不犹豫的一键三连吧。小伙伴们有想看的欢迎积极留言。前面几篇文章介绍Idea的常用插件,这只是本专栏很小的一部分,实现高效编码是一个很广泛的点,需要系统化的知识。其中单元测试就是非常重要的一部分。充分的单元测试可以很好的提高代码质量。本篇文章就将介绍单元测试框架Junit,小伙伴们是不是很期待呀,哈哈哈。
96 0
【高效编码】超全面的,超正的单元测试框架Junit的使用姿势
相关产品
云迁移中心
推荐文章
更多