我们平时编写自己的测试类,如果没有断言,那么就没写测试的必要了。

JUnit框架用一组assert方法封装了最常见的测试任务。这些assert方法可以极大地简化单元测试的编写。



Assert类包含了一组静态的测试方法,用于验证期望值expected和实际值actual逻辑比对是否正确,即测试失败,标志为未通过测试。

如果期望值和实际值比对失败,Assert类就会抛出一个AssertionFailedError异常,Junit测试框架将这种错误归入Fails并且加以记录。

每一个Assert类所属的方法都会被重载(OverLoaded),如果指定了一个String类型的传参则该参数将被做为AssertionFailedError异常的标识信息,告诉测试人员该异常的具体信息。

定义assert方法的辅助类的名称:Assert类。这个类包含了很多对于编写测试很有用的具体代码。Assert只有8个公有核心公有核心方法(如下图所示)。



Javadoc 中充满了这8个方法的便捷形式。这些便捷形式使得传递在测试中需要的任何类型都很简单。以assertEquals方法为例,它就有20种形式!大多数形式都是便捷形式,最终还是调用了核心的assertEquals(String message,Object expected, Object actual)方法。其实我一直比较好奇的,为什么Assert类没有assertNotEquals方法。另外在junit4中,也加入了AssertArrayEquals方法和AssertThat方法,这2个方法一个用来比较数组,一个用来使用matcher做自定义校验,关于Hamcrest我后面会专门做整理,这里先不做赘述。

总结:

1,关于上面的几个方法,我们都可以在使用它的重载方法,在第一个位置多带一个参数,如果断言不通过,抛出的异常信息中就会封装着我们传入的第一个异常参数信息。

2,在使用AssertEquals方法的时候,如果比较的2个参数是double或者float类型的时候,在第3个参数我们还可以传入一个误差范围。如果实际值在(期望值-误差范围)和(期望值+误差范围)内,那么测试通过。

当进行带有输入误差和截断误差的数学运算时,或者当断言一个关于文件修改日期的条件时,这些重载方法就很有用。

3,我们在使用上面的这些断言的时候,可以静态一次导入Assert类。

import static org.junit.Assert.*;

4,使用3.8系列的junit的话不用import这个断言类,使用4以后的系列必须inport进来,因为4X版本的junit又重新写了断言类,看过源码就知道是有2个断言类的。38那个断言类过时了,所以我们使用org.junit下面那个断言类。

package junit.framework;

/**
* A set of assert methods. Messages are only displayed when an assert fails.
*
* @deprecated Please use {@link org.junit.Assert} instead.
*/
@Deprecated
public class Assert {}
package org.junit;

import org.hamcrest.Matcher;
import org.hamcrest.MatcherAssert;
import org.junit.internal.ArrayComparisonFailure;
import org.junit.internal.ExactComparisonCriteria;
import org.junit.internal.InexactComparisonCriteria; /**
* A set of assertion methods useful for writing tests. Only failed assertions
* are recorded. These methods can be used directly:
* <code>Assert.assertEquals(...)</code>, however, they read better if they
* are referenced through static import:
*
* <pre>
* import static org.junit.Assert.*;
* ...
* assertEquals(...);
* </pre>
*
* @see AssertionError
* @since 4.0
*/
public class Assert {}

junit断言总结的更多相关文章

  1. Junit 断言 assertThat Hamcrest匹配器

    junit断言总结本文参考了http://blog.csdn.net/wangpeng047/article/details/9628449一 junit断言1.JUnit框架用一组assert方法封 ...

  2. java 测试 (junit+ junit 断言 + postman)

    实际开发中,除了开发,我想测试也是必不可少的一环吧.从简单的@Test .main 方法测试 到 页面测试 ,断言,postman. bug是无处不在,随时发生的事,高效率的调试.检测可以节省大量的开 ...

  3. junit 常用注解 + junit 断言详解

    @Test: 在junit3中,是通过对测试类和测试方法的命名来确定是否是测试,且所有的测试类必须继承junit的测试基类.在junit4中,定义一个测试方法变得简单很多,只需要在方法前加上@Test ...

  4. JUnit断言

    在本节中,我们将介绍一些断言方法.所有这些方法都受到 Assert 类扩展了java.lang.Object类并为它们提供编写测试,以便检测故障.下表中有一种最常用的断言方法的更详细的解释. 断言 描 ...

  5. 10.Android UiAutomator Junit 断言函数的使用

    一.断言函数介绍 1.断言函数: 确定被测试的方法是否按照预期的效果正常工作 比如说: if (假设成立){ 通过测试 }else{ 报错并终止当前用例测试 } 2.断言函数用例结构: 一个完整的测试 ...

  6. JUnit单元测试教程(翻译自Java Code Geeks)

    JUnit单元测试教程--终极指南 JUnit单元测试教程终极指南 说明 单元测试简介 1 什么是单元测试 2 测试覆盖 3 Java中的单元测试 JUnit简介 1 使用Eclipse实现简单JUn ...

  7. junit+mock+spring-test构建后台单元测试

    from:从0开始,构建前后端分离应用 1. 一些基本概念 1.1 为什么要进行单元测试?我自己的理解是 1.能够快速发现问题.避免衍生BUG的出现     在对一些现有代码进行修改时,或者修改现有B ...

  8. JUnit介绍(转)

    测试的重要性毋庸再说,但如何使测试更加准确和全面,并且独立于项目之外并且避免硬编码,JUnit给了我们一个很好的解决方案.一.引子    首先假设有一个项目类SimpleObject如下:    pu ...

  9. 使用Eclipse的JUnit实例

    在本节中,我们将展示使用JUnit的一个完整的例子.我们将详细了解如何创建和运行测试,我们将展示如何使用特定的注释和JUnit断言. 1. 初始步骤 让我们创建一个名为 JUnitGuide 的Jav ...

随机推荐

  1. Python模块学习------ 正则表达式

    import re #f = open('data.txt','r') #for eachline in f.readlines(): #print re.split('\s\s+', eachlin ...

  2. 使用阿里云镜像maven管理配置开发环境

    修改方法:在~/.m2目录下的settings.xml文件中,(如果该文件不存在,则需要从maven/conf目录下拷贝一份),找到<mirrors>标签,添加如下子标签: <mir ...

  3. Check whether a remote server port is open on Linux

    链接:https://www.pixelstech.net/article/1514049471-Check-whether-a-remote-server-port-is-open-on-Linux

  4. python之dictionary

    1.python3字典 字典是另一种可变容器模型,且可存储任意类型对象. 字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 d ...

  5. Android数据库之判断表是否存在

    Android开发的时候我们可能会用到它的本地数据库,在使用的时候有可能我们已经储存了数据了,但是,我们的表已经创建了,里面有数据,我们要怎么判断表是否已经创建可能就需要琢磨一下. 以下便是利用了,查 ...

  6. [转]"git rm" 和 "rm" 的区别

    用 git rm 来删除文件,同时还会将这个删除操作记录下来 直观的来讲,git rm 删除过的文件,执行 git commit -m "abc" 提交时, 会自动将删除该文件的操 ...

  7. html页面的音频问题

    导火线 : 负责了项目中的话务间模块,处理音频出了一点问题 之前的处理 : //循环播放声音 var dialAudioDocument = document.createElement('audio ...

  8. React Native:真机断点调试+跨域资源加载出错问题解决

    写在前面 闲来无事,折腾了一下React Native,相比之前,开发体验好了不少.但在真机断点调试那里遇到了跨域资源加载出错的问题,一番探索总算解决,目测是RN新版本调试服务的bug. 遇到类似问题 ...

  9. windows c++程序移植到linux的要点

    这段时间得到一份源码,是Windows下的,调试了一把,可以正常运行,可是没有Linux版本,而实际的应用场景是要在Linux服务器上面运行 所以涉及到Windows下c++程序的移植,有同事竭力推荐 ...

  10. 【转】Java中super和this的几种用法与区别

    1. 子类的构造函数如果要引用super的话,必须把super放在函数的首位.   class Base {   Base() {   System.out.println("Base&qu ...