Grailsのようにアプリケーションを作るのが, 簡単, というか仕様を書けばいいだけ, になってくると, 相対的にテストの比重がどんどん大きくなってくる. となると考えるのが, テストをどうやって楽にするか, だ.
Grailsのテスト・ツール, 特にテスト・データ管理のプラグインを簡単にまとめておく.
DBUnit Plugin
Javaのデータベース用テスト・ツール, DBUnit をそのままプラグイン化したもの.
http://code.google.com/p/dbunit-plugin/ (コード)
http://grails.org/plugin/dbunit
基本的には, DBUnitそのものだから, XMLでデータセットを <PROJECT>/test/datasets に定義して
<?xml version="1.0" encoding="UTF-8"?>
<dataset>
<person id="1" name="Pessoa 1" email="p1@email.com" version="1" />
<person id="2" name="Pessoa 2" email="p2@email.com" version="1" />
<person id="3" name="Pessoa 3" email="p3@email.com" version="1" />
<person id="4" name="Pessoa 4" email="p4@email.com" version="1" />
<person id="5" name="Pessoa 5" email="p5@email.com" version="1" />
</dataset>
テスト・コードの中でそれを呼び出すことができる.
static datasets = ['person']
GrailsでXMLかよ, というツッコミは当然だろう. そこで,
Fixtures Plugin
簡単にいえば, データセットをDSLで記述できるようにしたもの.
http://www.grails.org/plugin/fixtures
例えば, 次のようにデータセットを定義して (<PROJECT>/fixtures/foo.groovy),
fixture {
guillaume(Author) {
name = "Guillaume Laforge"
}
dierk(Author) {
name = "Dierk Koenig"
}
gina(Book) {
title = "Groovy In Action"
authors = [guillaume, dierk]
}
}
あるいは
fixture {
guillaume(Author, name: "Guillaume Laforge")
dierk(Author, name: "Dierk Koenig")
gina(Book, title: "Groovy In Action", authors: [guillaume, dierk])
}
テスト・コードの中で, それを呼び出すことができる.
def fixtureLoader
fixtureLoader.load("gina")
Build Test Data Plugin
前の二つが, データセットをすべて, 自分の責任で用意するタイプだった (だから手間はそれなりに掛かるけど, 詳細まで指定できる) のに較べて, このプラグインはドメインクラス定義の中で指定したconstraints に合わせて「適当に」データセットを作ってくれる.
http://www.grails.org/plugin/build-test-data
http://bitbucket.org/tednaleid/grails-test-data/wiki/Home (ドキュメント)
使い方はきわめて簡単で
def a = Author.build(firstName: "Daniel")
これだけ. 指定したプロパティ以外は「適当に」(関連も含めて) 作ってくれる.
ちょっとしたテストにはこっちの方が便利だろう.
この先
とは言え, テスト用のデータセット管理/生成ツールをもう少し何とかしたいという気もするし, Grailsならば何とかなるだろうという気もする.
アイデアはあるけど, 実装している時間が無い.