Groovyでユニットテストを書いてみる⑥
Groovyでユニットテストを書いてみます。
■Groovyでユニットテスト
package sample // いろいろと方法がありますが、今回は、spockを使用します。 // spock:https://code.google.com/p/spock/ // spockのJARファイルは、下記からダウンロードしました。 // http://repo1.maven.org/maven2/org/spockframework/spock-core/1.0-groovy-2.3/ // spockのテストをEclipseで実行するには、 //「Preferences ⇒ Groovy ⇒ Use monospace font for JUnit」をチェックする。 import static org.junit.Assert.* import groovy.sql.Sql import mockit.* import org.dbunit.Assertion import org.dbunit.database.DatabaseConnection import org.dbunit.dataset.IDataSet import org.dbunit.dataset.excel.XlsDataSet import org.dbunit.operation.DatabaseOperation import org.junit.* import spock.lang.* class ユニットテスト extends Specification { @Test def "java.lang.Mathのテスト(基本)"() { setup: // 前準備 cleanup:// 後処理 // when: テストしたいことを実行 // then: 実行結果をチェック when: def x1 = Math.max( 1, 2 ) then: x1 == 2 // when 〜 then は複数記載できる when: def x2 = Math.max( 0, 2 ) then: x2 == 2 when: def x3 = Math.max( 1, 0 ) then: x3 == 1 } @Test def "java.lang.Mathのテスト(応用)"() { setup: // 前準備 cleanup:// 後処理 // expect 〜 where で、引数と戻り値の複数パターンをまとめて記載できる expect: Math.max( a, b ) == c where: a | b || c 1 | 2 || 2 0 | 2 || 2 1 | 0 || 1 } }
spockを使うと簡潔に書けます。
JUnitを使った事がある人は、なんとなくコードからイメージが掴めると思います。
特筆すべきは、パラメータと戻り値の複数パターンテストですね。
where句にマトリックスのイメージで、テストパターンが記述できます。
テストパターンが一目瞭然です。
spockをEclipseで使用するには、設定を1箇所変更する必要があります。
Eclipseメニューの「ウィンドウ」→「設定」を選択。
「Groovy」→「Use monospace font for JUnit」をチェックします。
実行してみます。実行方法はJUnitと同じです。
ソースファイルを選択して、右クリック。
コンテキストメニューから「実行」→「JUnit テスト」を選択します。
ユニットテストでエラーになると、こうなります。
Eclipse上だとインデントがズレるので、ちょっと見にくいですが、
テキストをコピーすると下記のようになります。
spockの場合、引数や期待値、実際の値を示してくれるので、わかりやすいですね。
(引数a=0、b=2、期待値は3だけど、実際の値は2で一致してないよ。といっています)
Condition not satisfied: Math.max( a, b ) == c | | | | | 2 0 2 | 3 false at sample.UnitTest.java.lang.Mathのテスト(応用)(UnitTest.groovy:59)