2009年10月27日火曜日

GrailsのTagLibテストケースの記述

Grailsのバージョンは1.2-M3

最近のフレームワークは、開発者がテストにハマるようにいろいろ趣向こらしていて助かりますよね。
RSpec on RailsとZenTestはもうすごいよかったなぁ…
Groovyでも似たようなのないですかね、RSpec on Grails みたいなヤツ。あとZenTestみたいなヤツ。

さて、Grailsも最近のフレームワークなので、テストは結構楽しくできます。
ですが、Grailsの1.2(1.1も?)だと、ドメインモデルだのコントローラーだのは、テストケースの中でnewしてもうまくいかないらしいです。(ダイナミックメソッドが注入されずエラーになるみたい 参考:Grails1.1.xのUnitテスト)

TagLibのテストでも、同じようにnewして実行すると、メソッドやプロパティが見つからないと言われて落ちることがあります。
TagLibのユニットテストを記述するTagLibUnitTestCaseには、tagLibプロパティがあって、対象となるTagLibがセット済みなのでそれを使えばいいみたいです。

Grails をマスターするのカスタムタグを例にすると、

×
class DateTagLibTests extends GroovyTestCase {
def dateTagLib

void setUp(){
dateTagLib = new DateTagLib()
}

void testThisYear() {
String expected = Calendar.getInstance().get(Calendar.YEAR)
assertEquals("the years don't match", expected, dateTagLib.thisYear())
}
}

class DateTagLibTests extends GroovyTestCase {
void testThisYear() {
String expected = Calendar.getInstance().get(Calendar.YEAR)
assertEquals("the years don't match",expected, tagLib.thisYear())
}
}

上だと、
groovy.lang.MissingPropertyException:No such property: out for class
とか言われて落ちました。

あ、でも各テストケースの中(setUpじゃなくて)でTagLibクラスをnewすると普通にテスト通りましたね。
よくわからんです。

0 件のコメント:

コメントを投稿