• junit断言总结


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

    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 {}


  • 相关阅读:
    AngularJs跨域请求Java的实现---博客园老牛大讲堂
    JavaWeb的json包装以及跨域问题--博客园老牛大讲堂
    无网络联机打单机游戏---博客园老牛大讲堂
    H5移动开发AUI框架入门---博客园老牛大讲堂
    MySql链表语句--博客园老牛大讲堂
    Jquery的基本用法--博客园老牛大讲堂
    Java的日期字符串的转换---博客园老牛大讲堂
    实现访问电脑百度,访问到自己的工程方法---博客园老牛大讲堂
    Jquery的闭包理解--匿名函数--博客园老牛大讲堂
    xampp的安装和配置与HBuilder的配置--博客园老牛大讲堂
  • 原文地址:https://www.cnblogs.com/LinkinPark/p/5232892.html
Copyright © 2020-2023  润新知