株式会社ジェニシス 技術開発事業部の遠藤 太志郎です。
ハンドルネームはTacyです。
現在、『テスト自動化シリーズ』を連載中。
前回に引き続きJUnit4の使い方をご説明します。
今回のテーマは「Matcher」です。
「Matcher」はJUnit4の注目機能というか、むしろベース部分と言って良いでしょう。
前回の記事で僅かに登場していますが、
assertThat(sample001.getConnectString(str1, str2), is("株式会社ジェニシス技術開発事業部"));
の「is」の部分。これがMatcherです。
つまるところ、assertThatの一致条件を定義する機能ですね。
まず、以下の文章を記述する上の用語として以下を定義します。
実行結果:actual
予想結果:expected
さて、JUnitのテストというのは、「actural == expected」という完全一致を比較することが殆どです。
しかし、状況に依っては
- actual != expected
- actual < expected
- actual == null
- actualの頭の文字がexceptedかどうかチェック
- actualがリストで、その中にexpectedが含まれているかどうかチェック。
- actualが単一の値ではなくてDTOである。
というような色々と細かい要望も出てくるものです。
それをどうやってテストケースとして実現するか、というのもJUnitコーディングの腕の見せ所と言えるでしょう。
上のケース、実は全部自力でコーティングすれば何とかなるものです。
例えば一番上の「actual != expected」を実現したい場合、
assertThat(actual.equals(expected), is(false));
とでも書けば実現出来ます。
しかし、こうやって細かい条件を全部その場で自力で書いていたら作業効率が上がりません。プログラマーの個人差で実装方法が変わってソースの可読性が下がったり、バグが潜在したり、といったことも予想されるので、余り望ましいことではありません。
自力コーディングはやればやるほど品質が下がるものです。
JUnitでは、上記のような細かい要望に対応出来るように、前もって様々なチェック機能を備えていてくれています。
それが「Matcher」です。
Macherをフル活用し、自力コーディングではなく、JUnit推奨コーディングを行うことを目指しましょう!!
本稿「Matcherの使い方」では、基本となる既存Matcherを紹介する今回と、自分でMatcherを作ってしまうカスタムMatcherを紹介する次回の2回に渡り掲載します。
まずは紹介の前に環境のセットアップです。
セットアップ
公式サイトよりJUnitと拡張パッケージのhamcrestをダウンロードしてきます。
EclipseにはJunitライブラリを自動的にビルドパスに追加してくれる機能がついていますが、これだとライブラリが最新とは限りませんし、必要最低限しか追加されないので欲しい機能が使えないなど困ったことになりますので、手動でセットアップします。
(Eclipseには改善を期待したい所です。)
本稿を執筆する際の最新バージョンは、JUnitが4.11、hamcrestが1.3ですので、本稿もこれに準じて記載します。
ダウンロードしたら以下ファイルをビルドパスに追加します。
- junit-4.11.jar
- hamcrest-core-1.3.jar
- hamcrest-library-1.3.jar
これにてセットアップは完了です。
既存Matcher紹介
まず基本的なMatcherとして、JUnitでは以下が用意されています。
- org.hamcrest.CoreMatchers(hamcrest-core-1.3.jar)
- org.junit.matchers.JUnitMatchers(junit-4.11.jar)
これら基本Matcherを拡張したものとして、以下クラスがあります。
- org.hamcrest.Matchers(hamcrest-library-1.3.jar)
それぞれ入っている機能が違ったり、重複していたり、非推奨になっていたりします。
(特にJUnitMatchersは淘汰されて大半が非推奨になってしまいました)
基礎的な機能だけならばCoreMatchersのみで対応可能ですが、
Matchersを使うことでほぼフル機能が使えるようになります。
本稿ではMatchersをメインに検証しています。
次に、以下のようにクラスをstatic importして下さい。
import static org.hamcrest.Matchers.*;
これで対象クラスのMatcherを使うことが出来るようになりました。
さて、肝心の各クラスが有している機能ですが、セットアップに記載しているURLの先ではJavaDocもダウンロード出来ます。
詳細まで詳しく知りたい方はこちらを参照して頂くとしまして、現場ベースの本ブログとしては、やはり現場プログラマーが一番知りたい
「どうやれば何を実現出来るんだ?」という一覧を記載したいと思います。
基本機能
クラス | メソッド | 概要 |
CoreMatchers
Matchers | is | 対象オブジェクトが期待値と一致するかチェック |
CoreMatchers
Matchers | equalTo | 対象オブジェクトと期待値オブジェクトの一致チェック。オブジェクトのequalToメソッドで比較する。 |
Matchers | hasToString | 対象オブジェクトをtoStringした結果が期待文字列と一致するかチェック |
CoreMatchers
Matchers | not | macherの非定型を作成する。 |
複数の期待条件を組み合わせる機能
クラス | メソッド | 概要 |
CoreMatchers
Matchers | allOf | 対象オブジェクトを複数のMacherでチェックして、全てがtrueであるかどうかをチェック |
CoreMatchers
Matchers | anyOf | 対象オブジェクトを複数のMacherでチェックして、どれか一つでもtrueであるかどうかをチェック |
CoreMatchers
Matchers | both | 対象オブジェクトを二つのMacherでチェックして、両方共にtrueかどうかチェック |
CoreMatchers
Matchers | either | 対象オブジェクトを二つのMacherでチェックして、どちらか一方でもtrueかどうかチェック |
Matchers | isIn | 対象オブジェクトが期待するCollectionオブジェクトの中に含まれているかどうかをチェック。期待値にCollectionをセットする。 |
Matchers | isOneOf | 対象オブジェクトが期待するCollectionオブジェクトの中に含まれているかどうかをチェック。期待値に可変長引数をセットする。 |
文字列の検証に使用する機能
クラス | メソッド | 概要 |
Matchers | isEmptyString | 対象文字列が空白かどうかチェック。nullはNG |
Matchers | isEmptyOrNullString | 対象文字列が空白、もしくはnullかどうかチェック |
CoreMatchers
Matchers | startsWith | 対象文字列の先頭が期待値で始まっているかをチェック |
CoreMatchers
Matchers | endsWith | 対象文字列の末尾が期待値文字列であるかどうかをチェック |
CoreMatchers
Matchers | containsString | 対象文字列に期待文字列が含まれているかをチェック |
Matchers | equalToIgnoringCase | 対象文字列と期待値文字列の一致チェック。大文字と小文字を区別しない。 |
Matchers | equalToIgnoringWhiteSpace | 対象文字列と期待値文字列の一致チェック。空白スペースがある場合に空白スペースの数を意識しない。 |
Matchers | samePropertyValuesAs | 対象文字列に対し、期待値の文字が順番で含まれているかをチェック |
Matchers | stringContainsInOrder | 対象文字列に対し、期待値の文字が順番で含まれているかをチェック |
数値の検証に利用する機能
クラス | メソッド | 概要 |
Matchers | comparesEqualTo | 対象数値が期待数値と一致しているかチェック。isよりもメッセージが詳細 |
Matchers | greaterThan | 対象数値は期待数値より大きい(actual > expected)かどうかをチェック |
Matchers | greaterThanOrEqualTo | 対象数値は期待数値より以上(actual >= expected)かどうかをチェック |
Matchers | lessThan | 対象数値は期待数値未満(actual < expected)かどうかをチェック |
Matchers | lessThanOrEqualTo | 対象数値は期待数値以下(actual <= expected)かどうかをチェック |
Matchers | closeTo | 対象数値が期待される基準値から±指定値の範囲内に収まっているかをチェック |
nullチェック系(文字列のチェックについては上記「文字列の検証に使用する機能」参照)
クラス | メソッド | 概要 |
CoreMatchers
Matchers | notNullValue | 対象オブジェクトがnullでないことをチェック |
CoreMatchers
Matchers | nullValue | 対象オブジェクトがnullであることをチェック |
Listや配列など、チェック対象値が複数の場合に使用する機能
クラス | メソッド | 概要 |
Matchers | array | 対象配列オブジェクトの要素それぞれに対して、期待値の条件を満たすかどうかをチェック |
Matchers | arrayContaining | 対象オブジェクトのそれぞれに対して期待値と一致するかチェック。順番の整合性もチェック |
Matchers | arrayContainingInAnyOrder | 対象配列オブジェクトのそれぞれに対して期待値と一致するかチェック。順番の整合性はチェックしない。 |
Matchers | arrayWithSize | 対象配列オブジェクトのサイズが期待値と一致するかチェック |
Matchers | contains | 対象オブジェクトのそれぞれに対して期待値と一致するかチェック。順番の整合性もチェック |
Matchers | containsInAnyOrder | 対象オブジェクトのそれぞれに対して期待値と一致するかチェック。順番の整合性はチェックしない |
Matchers | empty | 対象Colelctionオブジェクトが空かどうかをチェック |
Matchers | emptyArray | 対象配列が空オブジェクトかどうかをチェック |
Matchers | emptyCollectionOf | 対象配列オブジェクトが空かどうかをチェック。型のチェックも行う。 |
Matchers | emptyIterable | 対象Iterableオブジェクトが空かどうかをチェック |
Matchers | emptyIterableOf | 対象Iterableオブジェクトが空かどうかをチェック。型のチェックも行う。 |
CoreMatchers
Matchers | everyItem | 対象オブジェクトの全ての要素に対して期待値を満たすかどうかをチェック |
CoreMatchers
Matchers | hasItem | 対象Iterableオブジェクトの中に期待値を満たすオブジェクトが含まれているかどうかをチェック |
Matchers | hasItemInArray | 対象配列オブジェクトの中に期待値を満たすオブジェクトが含まれているかどうかをチェック |
Matchers | hasItems | 対象Iterableオブジェクトの中に期待値を満たすオブジェクトが含まれているかどうかをチェック。期待値には複数条件を設定出来る。 |
Matchers | hasSize | 対象Collectionオブジェクトのサイズチェック |
Matchers | iterableWithSize | 対象Iterablesの型と要素数が期待値と一致するかをチェック |
Mapのチェックに使用する機能
クラス | メソッド | 概要 |
Matchers | hasEntry | 対象Mapに期待のkey,valueが入っているかチェック |
Matchers | hasKey | 対象Mapに期待されるkeyが入っているかをチェック |
Matchers | hasValue | 対象Mapに期待されるvalueが入っているかチェック |
インスタンスや型をチェックする系
クラス | メソッド | 概要 |
CoreMatchers
Matchers | any | 対象オブジェクトが期待するクラスのインスタンスであるかをチェック。instanceOfと同じ |
CoreMatchers
Matchers | instanceOf | 対象オブジェクトが期待するクラスのインスタンスであるかをチェック |
CoreMatchers
Matchers | isA | 対象オブジェクトのクラスが期待値のものであるかをチェック |
CoreMatchers
Matchers | sameInstance | 対象オブジェクトが期待するオブジェクトと同じインスタンスであることをチェック |
CoreMatchers
Matchers | theInstance | 対象オブジェクトが期待するクラスのインスタンスであるかをチェック |
Matchers | typeCompatibleWith | 対象オブジェクトが期待するクラスを継承しているかチェック |
その他
クラス | メソッド | 概要 |
CoreMatchers
Matchers | anything | 常にtrueになる。このオブジェクトはチェックしなくて良いということを明示する為の機能 |
CoreMatchers
Matchers | describedAs | エラー時に表示される文言を上書きする |
Matchers | eventFrom | 対象イベントオブジェクトの発生元が期待値であるかをチェック |
Matchers | hasProperty | 対象JavaBeansオブジェクトに期待する名称のプロパティが存在するかチェック |
Matchers | hasXPath | 対象XMLドキュメントに期待するパスが存在するかをチェック |
大量にありますね!!
表を見ると結構機能が被っていたり、他の機能で代行出来たりするものが多いです。
これは英語として綺麗になるように配慮されていることも理由の一つとしてあり、例えば「allOf」と「both」は似たような機能ですが、パラメータが3つ以上の時は「allOf」、2つの時は「both」を使うとソースの可読性が上がるわけです。
これらをフル活用して綺麗なテストコードを書き上げて下さい。
しかし、実際のプロジェクトではこのような汎用的なケースばかりではなくて、
プロジェクト独特のチェックを行いたい時もあります。
例えば「プロジェクトで作ったDTOの各パラメータが正しいかチェックしたい」といったケースです。
DTOの各パラメータが正しいかどうかは、各パラメータ全部に対して上記の既存Matcherを使ってチェックを行えば実現は可能ですが、それだとソースが冗長になってしまいます。
せっかくDTOとして一括りになっているのですから、「assertThat(dto1,is(dto2)」みたいに一行で完結させたいと思うのがJavaのオブジェクト指向というものです。
こういう場合は、自分でMatcherを作ってしまうことでテストソースを綺麗に出来るようになります。
次回、「Matcherの使い方(後編)」はカスタムMatcherをご紹介します。
追伸
上記の表を作る時に検証として書いたソースを以下に掲載しておきますので、こちらもお役に立てれば幸いです。
package jp.co.net.genesis.junit.sample;
import static org.junit.Assert.*;
import static org.hamcrest.Matchers.*;
import java.beans.PropertyChangeEvent;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.EventObject;
import java.util.HashMap;
import java.util.Map;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.hamcrest.collection.IsIterableWithSize;
import org.junit.Test;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
/**
* JUnitのMacherを検証
*
* @author 技術開発事業部 遠藤 太志郎
*
*/
public class MacherCheckTest {
/**
* 対象オブジェクトを複数のMacherでチェックして、全てがtrueであるかどうかをチェック
*/
@Test
public void testメソッドチェック_allOf() {
assertThat("myValue", allOf(startsWith("my"), containsString("Val")));
}
/**
* 対象オブジェクトが期待するクラスのインスタンスであるかをチェック。instanceOfと同じ
*/
@Test
public void testメソッドチェック_any() {
assertThat(new MacherCheckTest(), any(MacherCheckTest.class));
}
/**
* 対象オブジェクトを複数のMacherでチェックして、どれか一つでもtrueであるかどうかをチェック
*/
@Test
public void testメソッドチェック_anyOf() {
assertThat("myValue", anyOf(startsWith("foo"), containsString("Val")));
}
/**
* 常にtrueになる。このオブジェクトはチェックしなくて良いということを明示する為の機能
*/
@Test
public void testメソッドチェック_anything() {
assertThat("myValue", anything(""));
}
/**
* 対象配列オブジェクトの要素それぞれに対して、期待値の条件を満たすかどうかをチェック
*/
@SuppressWarnings("unchecked")
@Test
public void testメソッドチェック_array() {
assertThat(new Integer[]{1,2,3}, is(array(equalTo(1), equalTo(2), equalTo(3))));
}
/**
* 対象オブジェクトのそれぞれに対して期待値と一致するかチェック。順番の整合性もチェック
*/
@Test
public void testメソッドチェック_arrayContaining() {
assertThat(new String[]{"foo", "bar"}, arrayContaining("foo", "bar"));
}
/**
* 対象配列オブジェクトのそれぞれに対して期待値と一致するかチェック。順番の整合性はチェックしない。
*/
@Test
public void testメソッドチェック_arrayContainingInAnyOrder() {
assertThat(new String[]{"foo", "bar"}, arrayContainingInAnyOrder("bar", "foo"));
}
/**
* 対象配列オブジェクトのサイズが期待値と一致するかチェック
*/
@Test
public void testメソッドチェック_arrayWithSize() {
assertThat(new String[]{"foo", "bar"}, arrayWithSize(equalTo(2)));
}
/**
* 対象オブジェクトを二つのMacherでチェックして、両方共にtrueかどうかチェック
*/
@Test
public void testメソッドチェック_both() {
assertThat("fab", both(containsString("a")).and(containsString("b")));
}
/**
* 対象数値が期待される基準値から±指定値の範囲内に収まっているかをチェック
*/
@Test
public void testメソッドチェック_closeTo() {
assertThat(1.03, is(closeTo(1.0, 0.04)));
}
/**
* 対象数値が期待数値と一致しているかチェック。isよりもメッセージが詳細
*/
@Test
public void testメソッドチェック_comparesEqualTo() {
assertThat(1, comparesEqualTo(1));
}
/**
* 対象オブジェクトのそれぞれに対して期待値と一致するかチェック。順番の整合性もチェック
*/
@Test
public void testメソッドチェック_contains() {
assertThat(Arrays.asList("foo", "bar"), contains("foo", "bar"));
}
/**
* 対象オブジェクトのそれぞれに対して期待値と一致するかチェック。順番の整合性はチェックしない
*/
@Test
public void testメソッドチェック_containsInAnyOrder() {
assertThat(Arrays.asList("foo", "bar"), containsInAnyOrder("bar", "foo"));
}
/**
* 対象文字列に期待文字列が含まれているかをチェック
*/
@Test
public void testメソッドチェック_containsString() {
assertThat("myStringOfNote", containsString("ring"));
}
/**
* エラー時に表示される文言を上書きする
*/
@Test
public void testメソッドチェック_describedAs() {
String expected = "bbb";
assertThat("aaa", describedAs(expected + ":文字列が一致していません。", is(expected)));
}
/**
* 対象オブジェクトを二つのMacherでチェックして、どちらか一方でもtrueかどうかチェック
*/
@Test
public void testメソッドチェック_either() {
assertThat("fan", either(containsString("a")).or(containsString("b")));
}
/**
* 対象Colelctionオブジェクトが空かどうかをチェック
*/
@Test
public void testメソッドチェック_empty() {
assertThat(new ArrayList(), is(empty()));
}
/**
* 対象配列が空オブジェクトかどうかをチェック
*/
@Test
public void testメソッドチェック_emptyArray() {
assertThat(new String[0], emptyArray());
}
/**
* 対象配列オブジェクトが空かどうかをチェック。型のチェックも行う。
*/
@Test
public void testメソッドチェック_emptyCollectionOf() {
assertThat(new ArrayList(), is(emptyCollectionOf(String.class)));
}
/**
* 対象Iterableオブジェクトが空かどうかをチェック
*/
@Test
public void testメソッドチェック_emptyIterable() {
assertThat(new ArrayList(), is(emptyIterable()));
}
/**
* 対象Iterableオブジェクトが空かどうかをチェック。型のチェックも行う。
*/
@Test
public void testメソッドチェック_emptyIterableOf() {
assertThat(new ArrayList(), is(emptyIterableOf(String.class)));
}
/**
* 対象文字列の末尾が期待値文字列であるかどうかをチェック
*/
@Test
public void testメソッドチェック_endsWith() {
assertThat("myStringOfNote", endsWith("Note"));
}
/**
* 対象オブジェクトと期待値オブジェクトの一致チェック。オブジェクトのequalToメソッドで比較する。
*/
@Test
public void testメソッドチェック_equalTo() {
assertThat("foo", equalTo("foo"));
assertThat(new String[] {"foo", "bar"}, equalTo(new String[] {"foo", "bar"}));
}
/**
* 対象文字列と期待値文字列の一致チェック。大文字と小文字を区別しない。
*/
@Test
public void testメソッドチェック_equalToIgnoringCase() {
assertThat("Foo", equalToIgnoringCase("FOO"));
}
/**
* 対象文字列と期待値文字列の一致チェック。空白スペースがある場合に空白スペースの数を意識しない。
*/
@Test
public void testメソッドチェック_equalToIgnoringWhiteSpace() {
assertThat(" my\tfoo bar ", equalToIgnoringWhiteSpace(" my foo bar"));
}
/**
* 対象イベントオブジェクトの発生元が期待値であるかをチェック
*/
@Test
public void testメソッドチェック_eventFrom() {
EventObject eo = new PropertyChangeEvent(this, null, 0, "abcs");
assertThat(eo, is(eventFrom(PropertyChangeEvent.class, this)));
}
/**
* 対象オブジェクトの全ての要素に対して期待値を満たすかどうかをチェック
*/
@Test
public void testメソッドチェック_everyItem() {
assertThat(Arrays.asList("bar", "baz"), everyItem(startsWith("ba")));
}
/**
* 対象数値は期待数値より大きい(actual > expected)かどうかをチェック
*/
@Test
public void testメソッドチェック_greaterThan() {
assertThat(2, greaterThan(1));
}
/**
* 対象数値は期待数値より以上(actual >= expected)かどうかをチェック
*/
@Test
public void testメソッドチェック_greaterThanOrEqualTo() {
assertThat(1, greaterThanOrEqualTo(1));
}
/**
* 対象Mapに期待のkey,valueが入っているかチェック
*/
@Test
public void testメソッドチェック_hasEntry() {
Map map = new HashMap();
map.put("bar", "foo");
assertThat(map, hasEntry(equalTo("bar"), equalTo("foo")));
}
/**
* 対象Iterableオブジェクトの中に期待値を満たすオブジェクトが含まれているかどうかをチェック
*/
@Test
public void testメソッドチェック_hasItem() {
assertThat(Arrays.asList("foo", "bar"), hasItem(startsWith("ba")));
}
/**
* 対象配列オブジェクトの中に期待値を満たすオブジェクトが含まれているかどうかをチェック
*/
@Test
public void testメソッドチェック_hasItemInArray() {
assertThat(new String[] {"foo", "bar"}, hasItemInArray(startsWith("ba")));
}
/**
* 対象Iterableオブジェクトの中に期待値を満たすオブジェクトが含まれているかどうかをチェック
* 期待値には複数条件を設定出来る。
*
*/
@SuppressWarnings("unchecked")
@Test
public void testメソッドチェック_hasItems() {
assertThat(Arrays.asList("foo", "bar", "baz"), hasItems(endsWith("z"), endsWith("o")));
}
/**
* 対象Mapに期待されるkeyが入っているかをチェック
*/
@Test
public void testメソッドチェック_hasKey() {
Map map = new HashMap();
map.put("bar", "foo");
assertThat(map, hasKey(equalTo("bar")));
}
/**
* 対象JavaBeansオブジェクトに期待する名称のプロパティが存在するかチェック
*/
@Test
public void testメソッドチェック_hasProperty() {
Gene gene = new Gene();
assertThat(gene, hasProperty("mem"));
}
/**
* 対象Collectionオブジェクトのサイズチェック
*/
@Test
public void testメソッドチェック_hasSize() {
assertThat(Arrays.asList("foo", "bar"), hasSize(2));
}
/**
* 対象オブジェクトをtoStringした結果が期待文字列と一致するかチェック
*/
@Test
public void testメソッドチェック_hasToString() {
assertThat(true, hasToString(equalTo("true")));
}
/**
* 対象Mapに期待されるvalueが入っているかチェック
*/
@Test
public void testメソッドチェック_hasValue() {
Map map = new HashMap();
map.put("bar", "foo");
assertThat(map, hasValue(equalTo("foo")));
}
/**
* 対象XMLドキュメントに期待するパスが存在するかをチェック
*
* @throws ParserConfigurationException
*/
@Test
public void testメソッドチェック_hasXPath() throws ParserConfigurationException {
DocumentBuilderFactory dbfactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docbuilder = dbfactory.newDocumentBuilder();
Document document = docbuilder.newDocument();
Element rootElement = document.createElement("root");
document.appendChild(rootElement);
Element element = document.createElement("chilr");
rootElement.appendChild(element);
assertThat(document, hasXPath("/root/chilr"));
}
/**
* 対象オブジェクトが期待するクラスのインスタンスであるかをチェック
*/
@Test
public void testメソッドチェック_instanceOf() {
assertThat(new Gene(), instanceOf(Gene.class));
}
/**
* 対象オブジェクトが期待値と一致するかチェック
*/
@Test
public void testメソッドチェック_is() {
assertThat("genesis", is(equalTo("genesis")));
}
/**
* 対象オブジェクトのクラスが期待値のものであるかをチェック
*/
@Test
public void testメソッドチェック_isA() {
assertThat(new Gene(), instanceOf(Gene.class));
}
/**
* 対象文字列が空白、もしくはnullかどうかチェック
*/
@Test
public void testメソッドチェック_isEmptyOrNullString() {
assertThat(((String)null), isEmptyOrNullString());
}
/**
* 対象文字列が空白かどうかチェック。nullはNG
*/
@Test
public void testメソッドチェック_isEmptyString() {
assertThat("", isEmptyString());
}
/**
* 対象オブジェクトが期待するCollectionオブジェクトの中に含まれているかどうかをチェック
* 期待値にCollectionをセットする。
*/
@Test
public void testメソッドチェック_isIn() {
assertThat("foo", isIn(Arrays.asList("bar", "foo")));
}
/**
* 対象オブジェクトが期待するCollectionオブジェクトの中に含まれているかどうかをチェック
* 期待値に可変長引数をセットする。
*/
@Test
public void testメソッドチェック_isOneOf() {
assertThat("foo", isOneOf("bar", "foo"));
}
/**
* 対象Iterablesの型と要素数が期待値と一致するかをチェック
*/
@Test
public void testメソッドチェック_iterableWithSize() {
assertThat(Arrays.asList("foo", "bar"), IsIterableWithSize.iterableWithSize(2));
}
/**
* 対象数値は期待数値未満(actual < expected)かどうかをチェック
*/
@Test
public void testメソッドチェック_lessThan() {
assertThat(1, lessThan(2));
}
/**
* 対象数値は期待数値以下(actual <= expected)かどうかをチェック
*/
@Test
public void testメソッドチェック_lessThanOrEqualTo() {
assertThat(1, lessThanOrEqualTo(1));
}
/**
* macherの非定型を作成する。
*/
@Test
public void testメソッドチェック_not() {
assertThat("aaa", is(not(equalTo("bbb"))));
}
/**
* 対象オブジェクトがnullでないことをチェック
*/
@Test
public void testメソッドチェック_notNullValue() {
assertThat("", is(notNullValue()));
}
/**
* 対象オブジェクトがnullであることをチェック
*/
@Test
public void testメソッドチェック_nullValue() {
assertThat(null, is(nullValue()));
}
/**
* 対象オブジェクトが期待するオブジェクトと同じインスタンスであることをチェック
*/
@Test
public void testメソッドチェック_sameInstance() {
Gene gene = new Gene();
assertThat(gene, is(sameInstance(gene)));
}
/**
* 対象文字列の先頭が期待値で始まっているかをチェック
*/
@Test
public void testメソッドチェック_startsWith() {
assertThat("myStringOfNote", startsWith("my"));
}
/**
* 対象文字列に対し、期待値の文字が順番で含まれているかをチェック
*/
@Test
public void testメソッドチェック_stringContainsInOrder() {
assertThat("myfoobarbaz", stringContainsInOrder(Arrays.asList("foo","baz")));
}
/**
* 対象オブジェクトが期待するクラスのインスタンスであるかをチェック
*/
@Test
public void testメソッドチェック_theInstance() {
Gene gene = new Gene();
assertThat(gene, is(theInstance(gene)));
}
/**
* 対象オブジェクトが期待するクラスを継承しているかチェック
*/
@Test
public void testメソッドチェック_typeCompatibleWith() {
assertThat(Integer.class, typeCompatibleWith(Number.class));
}
/**
* テスト用クラス
*
*/
public class Gene{
private String mem;
public String getMem() {
return mem;
}
public void setMem(String mem) {
this.mem = mem;
}
}
}