*

JUnit入門その2[Eclipse4.4のJUnitプラグインのassertThatの使い方]

公開日: : 最終更新日:2016/12/05 Eclipse, Java, JUnit ,


スポンサードリンク



JUnit入門その1[EclipseのJUnitプラグインの基本的な使い方]ではEclipseのJUnitプラグインの基本的な使い方を説明させていただきました。

今回はassertThatメソッドの説明をさせていただきます。

  1. assertThatを利用するメリットと概要の説明
  2. assertThatで利用できるMatcherと利用方法
  3. assertThatでカスタムMatcherの利用方法


1 assertThatを利用するメリットと概要の説明

assertThatの概要

「assertThat」はJunit4.4で追加された新しいアサーションメソッドです。
これまでのアサーションメソッドは、メソッド自体がアサーション条件となっていましたが、「assertThat」では、
引数にアサーション条件を指定ことが可能です。
またdescribedAsを利用することでAssertion Error 時に出力するメッセージをカスタマイズすることも可能です。

例えばJunit4.3以前であれば、テストメソッドにおける値の一般的な検証は以下のように行っていました。

assertThatを用いて以下のように記載しすると同じ検証が行えます。

assertEqualsだと期待値と実際の値の値が同じであることを期待することがassertEqualsを使った時点で決定します。
assertThatだと期待値と実際の値の値をどう評価するかをMatcherで制御できます。

また、assertNotEqualsは実際にはJUnitには存在しませんが、assertThatを利用することで実現できます。

また、前述の例ではis,notのMatcherの利用例をあげましたが、他にも多くのMatcherが利用できますし、
テスト実装者が利用したいカスタムMatcherを作成し利用することも可能です。

2 assertThatで利用できるMatcherと利用方法

assertThatで利用するMatcherはorg.hamcrest.CoreMatchersに含まれています。
なお、org.junit.matchers.JUnitMatchersに含まれている比較メソッドは現在ではDeprecatedとなっていますので
org.hamcrest.CoreMatchersの同名メソッドを利用する必要があります。

org.hamcrest.CoreMatchersのMatcher

org.hamcrest.CoreMatchersのMatcherに含まれるMatcherは以下の通りです。

Matcherメソッド名 説明
allOf 指定した全ての比較メソッドがtrueであるかチェック
anyOf 指定した比較メソッドが1つでもtrueであるかチェック
is 期待値と実際の値が同じであるかチェック、equalToのショートカット
not 論理値を反転する
equalTo 期待値と実際の値が同じであるかチェック
instanceOf 指定したクラスのインスタンスであるかチェック
sameInstance 同じインスタンスであるかチェック
anything
any
nullValue nullチェック
notNullValue not nullチェック
hasItem 指定した値を保持しているかチェック。org.junit.matchers.JUnitMatchers.hasItemは@Deprecatedです。
hasItems 指定した値を保持しているかチェック。org.junit.matchers.JUnitMatchers.hasItemsは@Deprecatedです。
containsString 実際の値(文字列)が指定した文字列を含んでいるかチェック。org.junit.matchers.JUnitMatchers.containsStringは@Deprecatedです。
both 指定した比較メソッドが全てtrueであるかチェック(and()メソッドを併用)。org.junit.matchers.JUnitMatchers.bothは@Deprecatedです。
either 指定した比較メソッドが1つでもtrueであるかチェック(or()メソッドを併用)。org.junit.matchers.JUnitMatchers.bothは@Deprecatedです。

org.hamcrest.CoreMatchersのMatcherの利用例

テストクラスの作成

利用例を説明するためのテストクラスを作成します。

具体的な作成方法については
JUnit入門その1[EclipseのJUnitプラグインの基本的な使い方]の内容を参照ください。

テストクラスを作成した後にassertThatで利用するMatcherはorg.hamcrest.CoreMatchersのstaticインポートを追加します。

ここまでの作業が終わったテストクラス(AssertThatSampleTest)は以下のようになりました。

isのサンプル

まずは一番基本のisのサンプルです。
isはequalToのショートカットでもありますので、equalToの例も一緒にしています。

以降では各テストメソッドのみを記載いたします。

notのサンプル

allOfのサンプル

指定した全ての比較メソッドがtrueであるかチェックします。

hoge.startsWith(“foo”)かつhoge.endsWith(“bar”)のように複数の条件を満たすかチェックできます。
実際のコードでは実際の値であるhogeは記載しませんので、assertEqualsを複数書くより変更に強いと言えますが
あまり多くの条件を書くと可読性は落ちます。

anyOfのサンプル

とはいえorで検証するってシチュエーションが思いつかないです。
前回テスト実行時に成功した時にはA or BのAがtrueでBがfalse、今回実行時にはAがfalseでBがtrueで成功するなんて
ユニットテストのテストケースとしてはどうかと・・・
私だったら上記の2つのパターンが明確に確認できるテストデータとアサートに分割しますが・・・

instanceOfのサンプル

JavaのinstanceOfと同じ考え方です。
anyはinstanceOfのショートカットですので同じサンプルに入れてみました。

sameInstanceのサンプル

これは少し迷いますね、同じ型のインスタンスか、同じインスタンス(ポインタが同じ)かどちらをチェックするものでしょうか?

とりあえず同じ型のインスタンスかでテストを書いてみます。

実行すると失敗しました。

java.lang.AssertionError:
Expected: sameInstance(“dummy”)
but: was “foo bar”

同じインスタンス(ポインタが同じ)かどうかのチェックなんですね。
以下のように変更したところテストは成功しました。

anythingのサンプル

何でもtrueになるMatcherです。モックを利用しているけど、全ての振る舞いを制御できていない時等には
これでお茶を濁すなんて手もたまにやります。

nullValueとnotNullValueのサンプル

nullValueはnullチェックです。notNullValueも字面通り非nullチェックです。

hasItemのサンプル

特に迷うこともないと思います。

hasItemsのサンプル

これについても特に問題ないと思います。

containsStringのサンプル

bothのサンプル

中学校の英語の授業で習ったboth A and Bですね。

bothはallOfで書き換えられますので、allOfで同じチェックを追加してみます。

bothはandで条件をつなげていかないといけないので、どうしても括弧が多くなりがちですのでallOfの方が私的にはオススメです。

eitherもbothと記述方法としては同じです。こちらもanyOfで書き換えできます。


スポンサードリンク



関連記事

JUnit入門その3[Eclipse4.4のJUnitプラグインとMockフレームワークのJMockitの併用の基本]

JUnit入門その3ではMockフレームワークのJMockitを利用したテスト環境の構築と使い方につ

記事を読む

EclipseでAndroidアプリケーションの開発環境の構築と”Hello World!”まで

対象のOSはMac(OS X 1.9.5)とWindows7 64bitとなります。 といっても手

記事を読む

Eclipse(4.3,4.4)の使い方[パースペクティブのツールバーのカスタマイズ(「コマンド・グループ可用性」と「ショートカット」タブ)]

「パースペクティブのカスタマイズ」画面には、以下の4つのタブが存在しております。 ツール・バ

記事を読む

JUnit入門その5[DBUnitの概要説明]

前回エントリーでは「JUnit入門その4」と題してDBUnitをEclipseで動作させるための環境

記事を読む

Selenium入門その3[Selenium WebDriver(Java/Junit4)の使い方]

WebDriverでは、予め中継サーバを起動しなくても、テスト実行時にブラウザ拡張機能や、OSのネイ

記事を読む

「HyperSQL」の環境を作成し、Eclipseの「DBViewer」プラグインを利用してSQLを発行してみる

Eclipseの「DBViewer」プラグインを利用して「Java DB」の環境を作成し、SQLを発

記事を読む

利用すると生産性が格段に向上する厳選Eclipseショートカット集

今回のエントリーは、利用すると生産性が格段に向上するEclipseのショートカット集となります。

記事を読む

Eclipseの使い方(Eclipse4.4のブックマーク機能とタスク機能)

今回は、Eclipseのブックマーク機能とタスク機能の説明をさせていただきます。 両機能とも効率的

記事を読む

java8(JDK8)の新機能[大幅に強化されたコレクションAPI:java.util.List] をeclipseとJUnitで確認する。

Java8(JDK8)では、ラムダ式の導入を前提とした、コレクションAPIの新機能が追加されました。

記事を読む

Eclipseのインストールと日本語化とJDK8(Java8)対応[Eclipse4.4とEclipse4.3]

インストールするEclipseのバージョンですが、とりあえず4.3をターゲットとしておき、 4.4

記事を読む

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Spring5入門[AbstractRoutingDataSourceで複数DBへの接続とトランザクション制御]

今回はSpring MVCから複数データベースに接続とトランザクション

Eclipse Oxygen Update 1 (4.7.1)を利用してJUnit5の公式ガイドの内容を実践してみる。

いよいよJUnit5が本格的に利用できる環境が整ってきました。

Spring5入門[簡単なWebアプリのユニットテストをJUnit5とJMockitで作成]

Spring5入門ではJUnit4とmockitを利用したSpring

Spring5入門[STS(Spring Tool Suite)で簡単なWebアプリの典型的なユニットテストの実現方法]

前回は「Spring入門」で、Spring MVCを利用した簡単なWe

Spring5入門[STS(Spring Tool Suite)の環境作成と簡単なWebアプリの作成]

Struts1ももう過去の遺物になり、SAStrutsもEOLとなりも

→もっと見る

Optimization WordPress Plugins & Solutions by W3 EDGE
PAGE TOP ↑