Groovyでユニットテストを書いてみる(Mock)⑦
Groovyでユニットテストを書いてみます。
今回は、Mockを使用してみます。
■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 "Mockを使ってみる"() { // Mockを使って、既存クラスの挙動を変更する事ができる。 // 異常系の試験が簡単になります。(わざとエラーコードを返却させるなど) // JMockitを使います。 // JMockitのJARファイルは、下記からダウンロードしました。 // http://jmockit.org/ // JMockit.jarをjunit.jarより上位のクラスパスに設定します。(JMockit.jarを先に読み込む必要がある為) setup: // 前準備 // System.currentTimeMillis()にMockを設定し、現在時刻でなく、0を返却する new MockUp<java.lang.System>() { @Mock long currentTimeMillis() { return 0 } } cleanup:// 後処理 when: def x = System.currentTimeMillis() then: x == 0 // 0で返却されるのでテストOK } }
JMockitで、Mockを使ってユニットテストをしてみました。
System.currentTimeMillis()は、Javaの標準ライブラリですが、
Mockにすり替えて、戻り値を0に変更しています。
このように、Mockを使うと、
Java標準APIの挙動を自由に操作できるので、ユニットテストが簡単になります。(ラップする必要がなくなります)