このページでは
Matchers(CoreMatchers)の文字列と数値の検証について
注意点と使い方をまとめる。

この他のMatcherの検証については、こちらのページを参照。
(このサイト内の別記事)

文字列の検証
検証内容 メソッド Matchers CoreMatchers
指定した文字列で始まっているか startsWith()
指定した文字列で終わっているか endsWith()
指定した文字列を含んでいるか containsString()
指定した文字列が順番に含まれているかの検証 stringContainsInOrder()
大文字・小文字を無視して一致するか equalToIgnoringCase()
大文字・小文字と空白の長さを無視して一致するか equalToIgnoringWhiteSpace()
""(空文字)であるか isEmptyString()
""(空文字)あるいはnullであるか isEmptyOrNullString()
数値の検証
検証内容 メソッド Matchers CoreMatchers
>(より上)であるか greaterThan()
≧(以上)であるか greaterThanOrEqualTo()
<(より下)であるか lessThan()
≦(以下)であるか lessThanOrEqualTo()
compareTo()がtrueになるか comparesEqualTo()
誤差の範囲内であるか closeTo()

文字列の検証

指定した文字列で始まっているか - startsWith()

String#startsWith()を利用している。

String actual = "Hello World";
assertThat(actual, startsWith("Hello"));

指定した文字列で終わっているか - endsWith()

String#endsWith()を利用している。

String actual = "Hello World";
assertThat(actual, endsWith("World"));

指定した文字列を含んでいるか - containsString()

String#containts()を利用している。

String actual = "Hello World";
assertThat(actual, containsString("or"));

指定した文字列を順番に含んでいるか - stringContainsInOrder()

順番が前後しても検証失敗になる。

String actual = "Hello World";
assertThat(actual, stringContainsInOrder(Arrays.asList("llo", "or")));

大文字・小文字を無視して一致するか - equalToIgnoringCase()

String#equalToIgnoringCase()を利用している。

String actual = "Hello World";
assertThat(actual, equalToIgnoringCase("hello world"));

大文字・小文字と空白の長さを無視して一致するか - equalToIgnoringWhiteSpace()

equalToIgnoringCase()に加えて、
空白の長さも無視する。

ただし、空白自体を完全に無視するわけではない。

String actual = "Hello World";
assertThat(actual, equalToIgnoringWhiteSpace("Hello     World"));

""(空文字)であるか - isEmptyString()

 

String actual = "";
assertThat(actual, isEmptyString());

""(空文字)あるいはnullであるか - isEmptyOrNullString()

""(空文字)に加えて、nullもOK。

String actualEmpty = "";
assertThat(actualEmpty, isEmptyOrNullString());
 
String actualNull = null;
assertThat(actualNull, isEmptyOrNullString());

数値の検証

>(より上)であるか - greaterThan()

 

int actual = 100;
assertThat(actual, greaterThan(99));

≧(以上)であるか - greaterThanOrEqualTo()

 

int actual = 100;
assertThat(actual, greaterThanOrEqualTo(99));
assertThat(actual, greaterThanOrEqualTo(100));

<(より下)であるか - lessThan()

 

int actual = 100;
assertThat(actual, lessThan(101));

≦(以下)であるか - lessThanOrEqualTo()

 

int actual = 100;
assertThat(actual, lessThanOrEqualTo(100));
assertThat(actual, lessThanOrEqualTo(101));

compareTo()がtrueになるか - comparesEqualTo()

例えばBigDecimalなどでは、
equals()は精度まで一致しなければtrueにならなない。

よって、数値として純粋に比較したい場合にis()ではなくcompareTo()の方がいいときは、comparesEqualTo()を使う。

BigDecimal actual = new BigDecimal("20.0");
assertThat(actual, comparesEqualTo(new BigDecimal("20.00")));

誤差の範囲内であるか - closeTo()

特にfloatやdoubleの場合は誤差が生じるので、
equals()を用いるis()を使うと誤差のせいでマッチしないことがある。

そんなときはcloseTo()を利用して、
許容範囲を指定するとうまく検証できる。

double actual = 100.001;
assertThat(actual, is(closeTo(100, 0.01)));

PR