2011年3月23日 22:37

Scenic3でAppUrlsのテストを簡単に行う #slim3 #scenic3

先日のTDDBCでGitを使ったのでためしに使ってみるテスト


Scenic3slim3を薄くラップして1つのPageクラスに複数のControllerを持たせることのできるフレームワークです。

Controllerクラスが増えすぎずStrutsライクにコードを書けるため結構使いやすいのですが、Pageクラスを追加する度にAppUrlsにも対応するMatcherクラスを追加しないといけないのが難点です。

package sample.page;

@Page("/")
public class FrontPage extends ScenicPage{

    // some method

}
package sample.controller;

public class AppUrls extends UrlsImpl {
    public AppUrls() {
        add(FrontPageMatcher.get());
    }
}
結構忘れがちなのでたまにページにアクセスできなくてハマります

そこで、JUnitを使ってAppUrlsに全てのMatcher.get()が書かれているかを動的に調べるユーティリティっぽいのを作ってみました
package sample.controller;

public class AppUrlsTest extends AppUrlsTester {
    @Test
    public void checkPageMatcher(){
        if(AppEngineUtil.isProduction()){
            // Production環境ではクラスパスがとれないためテストしない
            return;
        }
        assertAppUrls("sample", new AppUrls());
    }
}
こんなテストクラスを1つ作っておくだけで、Pageが追加された時に自動的にAppUrls内のMatcher.get()の記述かあるかどうかを調べてくれます。ビバ自動化

仕組み
  • クラスパス配下を全て検索してPageクラスを検出する(ScenicPageを継承していて、かつ@Pageがついているクラス)
  • 検出したPageクラスに対応するMatcher.get()のtoString()の結果(パス情報)が全てAppUrlsに含まれているかを調べる

欠点
  • 任意のPageクラスだけ除外ということができない
  • Production環境上ではクラスパスが取得できないため、ローカル上でしかテストできない。
    クラスファイルを列挙するためにファイルシステムにアクセスしていますが、[Java] 指定パッケージ内のクラス一覧を取得するサンプルのやり方だとjavax.tools.*がappengineのSDKでサポートされていないためローカルで動かすこともできません
  • UrlsImplの実装に依存しているため、UrlsImplの仕様が変わるとアウト
  • ろくなドキュメントがない。ソース嫁

そんなわけで便利なテストクラスですが欠点もあるため使いたい場合は自己責任で使ってください


動作確認環境
  • Google App Engine SDK 1.4.2
  • Slim3 1.0.9
  • Scenic3 0.4.2

ソース
main以下を適当にインポートして使ってください


3/24追記

Scenic3の作者のshuji_w6eさんが僕のソースをヒントにAppUrlsの自動テストを実装してくれました。ありがとうございますー(0.5.0で対応予定)

Scenic3のAppUrlsに関するテスト - やさしいデスマーチ



2011年3月21日 23:06

TDD Boot Camp福岡に参加してきました #tddbc


まとめ
Togetter - 「TDD Boot Camp福岡」 : http://togetter.com/li/114056

参加したきっかけ
TwitterのTLで見て勢いで申し込み。まさか地震が起きるとは思いませんでした。
TDDBCの最中に東京が壊滅したらそのまま福岡の実家に疎開するところでした(ノ∀`)

当日
地震がなければ普通に金曜日仕事だったため、そのつもりで当日福岡入りの飛行機のチケをとってました。

いつもは時間に結構余裕を持って行動してるのですが、当日朝3時半起き→始発電車→始発飛行機という結構ギリギリなスケジューリングでした。羽田に着いた時点で飛行機出発30分前。手荷物預けとかの時間も含めると結構シビアでした。1本電車が止まったら遅刻確定。(まぁ先に搭乗手続きしてたら全員乗るまで飛行機は飛ばないと思いますが(たぶん))

参加者はTA含めて20人ちょい。うち女性は1名だけという、ほぼ男子校状態でした。何このajn状態

流れとしては講師の和田さん達の講演とペアプロが半々くらい。途中時間が空くことがあったのでゲリラLTが開催されました

自分もネタを用意してLTに参加しました(画像のリンク先に資料があります)

lt.png

Google App Engineを今流行のマギカ風に紹介してみました
結構早口で説明してしまったため分かりにくかったかもorz
会場の反応としてはちょいうけで、Twitter上のappengineクラスタにはややうけといったところかw
いつかajnでも発表できるといいですねぇ

ペアプロは今までやったことがなかったので楽しかったです。1人では気づきがあるってのはいいですね。ただ、自分が相方を引っ張りすぎてしまった感があるため猛省。


今回の戦利品的な物

tddbc1.jpg
「プログラマが知るべき97のこと」の監修者の和田さんから2回目のサインを貰いました。(上が1月に貰ったやつで、下が今回貰ったやつ)



tddbc2.jpg

TDD Boot Campの修了証みたいなやつですね。
写真じゃ分かりにくいですが「acts_as_professional(プロとして行動する)」と書いてあります。
プロとして自分のコードに責任をもつためにテストを書くという意味。

グリーンバンドの由来に関しては下記を参照



tddbc3.jpg
最後の表彰式で貰いました。確か表彰理由と本の選定理由は「ライブラリとかよく知っているのでこれでこの本でもっと知識を深めてほしい」(だっけ?)
マルチスレッド系は苦手なのでかなり嬉しいですー



tddbc4.jpg
上から順に長浜ラーメン、めんべい(めんたいこのせんべい)、博多とおりもん
ラーメンは完全に自分用ですねw
スーパーでラーメンとか買い占める人はお土産屋さんで買い占めた方が地域振興になっていいかなぁと。

2011年3月19日 3:50

生存報告とか

地震とかありましたが生きてます。

東京都内は(自分が見た範囲で)自分の被害はないのですが、節電の影響の電車ダイヤ乱れがorz
食料に関しては地震直後のコンビニは悲惨でしたが2日目以降は日持ちする物以外はある方かなぁと

譲り合いの精神の「ウエシマ作戦」で行きましょう。
ちなみにこれは「ヤシマ作戦」とかけてのTwitterで出たネタですが公式化しましたw

地震に関してこちらでできることとして、今までのシェアウェアでの売上を募金しました。
sc0005.png

取り急ぎ口座に15000円ちょい残っていたため全部募金しましたが残高0円というのは見ていて気持ちいいものですねw
あぶく銭はこういうところで使わんと!

他にも楽天ポイント、Tポイント、ANAマイルでも募金しました。
現金に比べればポイント系は募金するのが敷居が低いと思うのでお勧めです

ここで本題。週末にTDD Boot Camp 福岡に参加するために福岡に行くため、改変ツールのライセンスキー発行ができませんm(_ _)m
3/20の夜には東京に戻るのでそんなに長くはないのですが念のためAnyWare+を非公開にしました