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


原文地址:https://www.cnblogs.com/LinkinPark/p/5232892.html