テストとリロード
先日、Grails の Artefact は、開発モードで実行している時に編集したり新規追加するとリロードあるいはロードされるといった記事を書きました(Seasar の Hot Deploy のようなもの)。
以下、この事を単に「リロード」と書きます。
Grails は、書こうと思えば、全てのレイヤのテストを書くことができます。機能テスト以外は、Grails 自体がその仕組みを持っており、機能テストに関しては webtest Plugin を利用します。
さてさて、これらの仕組みを使って完璧なテスト駆動開発を行った場合、リロードという仕掛けは必要でしょうか?
完璧なビヘイビア駆動開発ではどうでしょうか?
恐らくきっと、不要なはずなのです。
つまり、リロードは、テスト駆動開発やビヘイビア駆動開発でない開発スタイルの場合に本来必要とされるものと言えるでしょう。けれども、なかなか完璧なモノやコトはありませんので、完璧でないテスト駆動開発やビヘイビア駆動開発というのが大方でしょう。従って、それらの完璧でないケースでも、リロードはあれば便利な仕掛けとやはり言えるのでしょう。
ただ私は不満があります。上で書いた意味での完璧でないテスト駆動開発やビヘイビア駆動開発において、リロードの仕掛けにより、次のような流れで作業ができると良いのにと思っているのですが、Grails ではできません。
1. アプリを起動する (grails run-app)
2. Artefact を追加あるいは修正する
3. テストコードを書いてテストを実行 (grails test-app; これは、必要と思った時)
4. アプリで動作確認(もちろんアプリは起動したまま)
5. 2 から繰り返し
Grails の場合、3. でテストを実行すると次のようなログが出力されてコンテナがリフレッシュします。
2008-04-04 00:02:32.326:/pagination:INFO: Initializing Spring root WebApplicati onContext [242187] spring.GrailsWebApplicationContext Refreshing org.codehaus.groovy.grail s.commons.spring.GrailsWebApplicationContext@111cab5: display name [org.codehaus .groovy.grails.commons.spring.GrailsWebApplicationContext@111cab5]; startup date [Fri Apr 04 00:02:32 JST 2008]; parent: org.springframework.web.context.support .XmlWebApplicationContext@46f93 [242187] spring.GrailsWebApplicationContext Bean factory for application context [org.codehaus.groovy.grails.commons.spring.GrailsWebApplicationContext@111cab5] : org.springframework.beans.factory.support.DefaultListableBeanFactory@1b766c1 2008-04-04 00:02:33.920:/pagination:INFO: Initializing Spring FrameworkServlet 'grails' 2008-04-04 00:02:33.936::INFO: Started SelectChannelConnector@0.0.0.0:8080
完璧でないテスト駆動開発の下でコードを書いている時に、テストを書くまでもないと思う所と、ここはテストを書いて確認しておきたいと思う所があります。後者がアプリを起動した状態で出来るとかなり満足なのですが・・・。