アプリ開発

playframework2でテストをしてみる

投稿日:2013/05/30 更新日:

Playframework2のパッケージ構成をみてみると、testパッケージがあります。
ApplicationTest.javaというソースコードがあり、この中をみてみると、

public class ApplicationTest {
    @Test 
    public void simpleCheck() {
        int a = 1 + 1;
        assertThat(a).isEqualTo(2);
    }
    
    @Test
    public void renderTemplate() {
        Content html = views.html.index.render("Your new application is ready.");
        assertThat(contentType(html)).isEqualTo("text/html");
        assertThat(contentAsString(html)).contains("Your new application is ready.");
    }
}

のようになっており、実行してみると実行できるではありませんか。

普通にプログラムを組むと、モデルのテストは簡単にできても、ビューやコントローラーのテストって、かなり厳しいんじゃないでしょうか。
RequestやらSessionやら出てきたら、インターフェース作って、モック作って・・・。って、結局テストするためのコードを書いている時間がすごく長くなり、もういいやってなっちゃうこともあるんじゃないかなーと思います。
そこまでやらなくても、でもテストして実行してみたいということになると、Jettyたちあげて、アクセスしてみて結果をアサーションしてみて、ってこれはこれで結構面倒なんですよね・・・。

でも、Playframework2はそのまま実行できて、ビューのレンダリング結果が帰ってくる。いやー、びっくりしました。
結局、ブラウザでの見た目のテストも重要だと思いますが、コードレベルでのテストも、できるに越したことはないかなーと思います。
例えばですよ、表示したい要素がすべてhtmlに含まれているか?というテストを行いたいと。あー、じゃTocmatかなんか立ち上げといて、Seleniumでやればいいんじゃない?やったことある人はわかると思いますけど、結構だりぃんですよ。テストが多いと、かなり時間もかかりますからね。
Playframework2の場合は、こんな感じです。

    @Test
    public void testTimeline() throws Exception {
    	TwitterInfo ti = new TwitterInfo();
    	ti.screen_name = "★スクリーン名★";
    	ti.description = "★概要★";
    	
    	List<Tweet> tweets = new ArrayList<Tweet>();
    	tweets.add(createTweet("★ついーと1★"));
    	tweets.add(createTweet("★ついーと2★"));
    	tweets.add(createTweet("★ついーと3★"));
    	ti.tweets = tweets;
    	
    	Content html = views.html.timeline.render(ti);
    	String source = contentAsString(html);
    	assertThat(StringUtils.countMatches(source, "★スクリーン名★")).isEqualTo(1);
    	assertThat(StringUtils.countMatches(source, "★概要★")).isEqualTo(1);
	}

自分がフレームワークをあんまり触ってこなかったかもしれませんが、コンテナ動かさずにビューのテストできるなんて、カルチャーショック的なものがありました。
ただ、JenkinsなどのCIで動くかは別問題ですね。これが動いたら、すっごいな。今度試してみよう。

-アプリ開発
-

執筆者:


comment

メールアドレスが公開されることはありません。

関連記事

no image

Playframework2にTwitter Bootstrapを導入してみる

先日から作っているPlayframework2でTwitterのタイムラインを表示させるアプリケーションですが、せっかくなのでTwitter Bootstrapを使って見ることにしました。 Playf …

no image

Playframework2のプロジェクトをEclipseプロジェクトに変換

実は、管理人はEcilpseを使ってそろそろ10年近くになります。 本当はNetBeansとか使ってみればいいんでしょうけど、なかなかツールを変える勇気がなくEclipseを使っています。 で、調べて …

no image

MacにPlayframework2をインストールする

実は、わたくし今までほとんどフレームワークらしいフレームワークは使ったことがありません。 さすがに、そろそろフレームワークでも触ってみようかと思って色々調べました。 一応この業界に10年ほどいるんです …

no image

playframework2のアドレス設計・・・

普通フレームワーク使っていないアプリだと、ファイル名 = URLになることがおおいと思います。 例えば、/index.htmlは/index.htmlとアクセスすれば表示されます。 playframe …

no image

Playframework2を使って何か作る・・・の巻

今、Playframework2のインストールを行なって、アプリを作っただけですが、やっぱり単にチュートリアル系をやっただけだと、どうも理解した気にしかならないので、何か作ってみようと思います。 恥ず …