【JAVA-UT】4、Assert--验证结果是否符合期望

文|码术张

被测功能运行结果是预期的结果吗?
用Assert类提供的方法进行验证。
Assert类中,有很多种验证的方法。
按是否使用Matcher技术,可分为两类。

#####一、不使用Matcher技术的方法
Junit中,这类方法有近40多个。
按所比较对象是否为数组,分为两类:

  1. 比较的对象是数组。
  2. 比较的对象不是数组。

这两类中的每一类,可继续按比较对象的类型,划分为两类:

  1. 基本数据类型
  2. 其他类型

所以,一共有如下4组:

  1. 比较的对象是数组,数组元素的类型是基本数据类型
assertArrayEquals(byte[] expecteds, byte[] actuals);
assertArrayEquals(char[] expecteds, char[] actuals);
assertArrayEquals(int[] expecteds, int[] actuals);
assertArrayEquals(long[] expecteds, long[] actuals);
assertArrayEquals(short[] expecteds, short[] actuals);

assertArrayEquals(java.lang.String message, byte[] expecteds, byte[] actuals);
assertArrayEquals(java.lang.String message, char[] expecteds, char[] actuals);
assertArrayEquals(java.lang.String message, int[] expecteds, int[] actuals);
assertArrayEquals(java.lang.String message, long[] expecteds, long[] actuals);
assertArrayEquals(java.lang.String message, short[] expecteds, short[] actuals);
  1. 比较的对象是数组,元素的类型是其他数据类型
assertArrayEquals(java.lang.Object[] expecteds, java.lang.Object[] actuals);
assertArrayEquals(java.lang.String message, java.lang.Object[] expecteds, java.lang.Object[] actuals);
  1. 比较的对象是单个元素,元素类型是基本数据类型
assertEquals(double expected, double actual, double delta);
assertEquals(long expected, long actual);
assertFalse(boolean condition);
assertTrue(boolean condition);

assertEquals(java.lang.String message, double expected, double actual, double delta);
assertEquals(java.lang.String message, long expected, long actual);
assertFalse(java.lang.String message, boolean condition);
assertTrue(java.lang.String message, boolean condition);

  1. 比较的对象是单个元素,元素类型是其他数据类型
assertEquals(java.lang.Object expected, java.lang.Object actual);
assertNotNull(java.lang.Object object);
assertNotSame(java.lang.Object unexpected, java.lang.Object actual);
assertNull(java.lang.Object object);
assertSame(java.lang.Object expected, java.lang.Object actual);

assertEquals(java.lang.String message, java.lang.Object expected, java.lang.Object actual);
assertNotNull(java.lang.String message, java.lang.Object object);
assertNotSame(java.lang.String message, java.lang.Object unexpected, java.lang.Object actual);
assertNull(java.lang.String message, java.lang.Object object);
assertSame(java.lang.String message, java.lang.Object expected, java.lang.Object actual);

如何使用呢?
假设比较的数据为String类型,
目的是检查它们是否相等,
那么,就选择下面这个方法:
assertEquals(java.lang.Object expected, java.lang.Object actual);
例如:

public class AssertTests {
  @Test
  public void should_Equals() {
    String expectedResult = "him";

    String actualResult = "she";

    Assert.assertEquals(expectedResult, actualResult);
  }
}

运行结果如下:
result-without-message.PNG

若要从运行结果中获得额外信息,可以使用方法:
assertEquals(java.lang.String message, java.lang.Object expected, java.lang.Object actual);
参数message的信息,会在运行结果中打印出来。
将测试类修改如下:

public class AssertTests {
  @Test
  public void should_Equals() {
    String expectedResult = "him";
    String actualResult = "she";
    Assert.assertEquals("2018-05-04", expectedResult, actualResult);
  }
}

运行结果如下:
result-with-message.PNG

#####二、使用Matcher技术的方法
Assert类中,有一个方法使用了Matcher技术。它就是:

assertThat(actualValue, Matcher);

什么是Matcher?
Matcher是一个接口,它有方法matches。
这个方法会被assertThat以actualValue作为参数调用matches。
不同的matches方法,功能不同,例如比较两个对象是否相等,判断对象是否为空。

如何获得Matcher呢?
可以使用下面这些方法获得:
public static <T> Matcher<T> is(java.lang.Class<T> type)
public static <T> Matcher<T> equalTo(T operand)
public static <T> Matcher<T> not(T value)
public static Matcher<Object> nullValue()
public static Matcher<Object> notNullValue()
public static <T> Matcher<T> sameInstance(T target)
public static Matcher<String> containsString(String substring)
public static Matcher<String> containsStringIgnoringCase(String substring)
public static Matcher<String> startsWith(String prefix)
public static Matcher<String> startsWithIgnoringCase(String prefix)
public static Matcher<String> endsWith(String suffix)
public static Matcher<String> endsWithIgnoringCase(String suffix)
public static Matcher<String> matchesRegex(Pattern pattern)
public static Matcher<String> matchesRegex(String regex)
public CombinableMatcher<T> and(Matcher<? super T> other)
public CombinableMatcher<T> or(Matcher<? super T> other)
public static <LHS> CombinableBothMatcher<LHS> both(Matcher<? super LHS> matcher)
public static <LHS> CombinableEitherMatcher<LHS> either(Matcher<? super LHS> matcher)

接下来,以equalTo为例,说明如何使用assertThat

import static org.hamcrest.CoreMatchers.equalTo;

import org.junit.Assert;
import org.junit.Test;


public class AssertThatTests {
  @Test
  public void should_Equals() {
    String expectedResult = "him";
    String actualResult = "she";
    Assert.assertThat(actualResult, equalTo(expectedResult));
  }
}

运行结果如下:
result-used-assertThat.png

使用assertThat的优点

  1. 信息更多
    注意上面运行结果,被加了橙色框框的部分。
    这是提示信息。
    在分析运行结果时,很有用。
    而这是使用assertEqual这样的方法,所不具备的。
  2. 适用范围广
    因为可以根据场景定制Matcher。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值