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)