文|碼術(shù)張
被測功能運(yùn)行結(jié)果是預(yù)期的結(jié)果嗎?
用Assert類提供的方法進(jìn)行驗(yàn)證镊尺。
Assert類中,有很多種驗(yàn)證的方法并思。
按是否使用Matcher技術(shù)庐氮,可分為兩類。
一宋彼、不使用Matcher技術(shù)的方法
Junit中弄砍,這類方法有近40多個(gè)仙畦。
按所比較對象是否為數(shù)組,分為兩類:
- 比較的對象是數(shù)組音婶。
- 比較的對象不是數(shù)組慨畸。
這兩類中的每一類,可繼續(xù)按比較對象的類型衣式,劃分為兩類:
- 基本數(shù)據(jù)類型
- 其他類型
所以寸士,一共有如下4組:
- 比較的對象是數(shù)組,數(shù)組元素的類型是基本數(shù)據(jù)類型
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);
- 比較的對象是數(shù)組碴卧,元素的類型是其他數(shù)據(jù)類型
assertArrayEquals(java.lang.Object[] expecteds, java.lang.Object[] actuals);
assertArrayEquals(java.lang.String message, java.lang.Object[] expecteds, java.lang.Object[] actuals);
- 比較的對象是單個(gè)元素弱卡,元素類型是基本數(shù)據(jù)類型
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);
- 比較的對象是單個(gè)元素,元素類型是其他數(shù)據(jù)類型
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);
如何使用呢住册?
假設(shè)比較的數(shù)據(jù)為String類型婶博,
目的是檢查它們是否相等,
那么荧飞,就選擇下面這個(gè)方法:
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);
}
}
運(yùn)行結(jié)果如下:
若要從運(yùn)行結(jié)果中獲得額外信息凡人,可以使用方法:
assertEquals(java.lang.String message, java.lang.Object expected, java.lang.Object actual);
參數(shù)message的信息,會(huì)在運(yùn)行結(jié)果中打印出來叹阔。
將測試類修改如下:
public class AssertTests {
@Test
public void should_Equals() {
String expectedResult = "him";
String actualResult = "she";
Assert.assertEquals("2018-05-04", expectedResult, actualResult);
}
}
運(yùn)行結(jié)果如下:
二挠轴、使用Matcher技術(shù)的方法
Assert類中,有一個(gè)方法使用了Matcher技術(shù)条获。它就是:
assertThat(actualValue, Matcher);
什么是Matcher忠荞?
Matcher是一個(gè)接口,它有方法matches帅掘。
這個(gè)方法會(huì)被assertThat以actualValue作為參數(shù)調(diào)用matches。
不同的matches方法堂油,功能不同修档,例如比較兩個(gè)對象是否相等,判斷對象是否為空府框。
如何獲得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));
}
}
運(yùn)行結(jié)果如下:
使用assertThat的優(yōu)點(diǎn)
信息更多
注意上面運(yùn)行結(jié)果院峡,被加了橙色框框的部分。
這是提示信息系宜。
在分析運(yùn)行結(jié)果時(shí)照激,很有用。
而這是使用assertEqual這樣的方法盹牧,所不具備的俩垃。適用范圍廣
因?yàn)榭梢愿鶕?jù)場景定制Matcher励幼。