snbhsmt_log

ネットワークとコンピュータ、その他いろいろ

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

AppRouter のテストはどう書く

9/03 追記:
ControllerTester#start() でルーティングされないのはバグだったらしく、 Revision 1340 で Fix された様です。

なので、これ以降の Slim3 を利用すれば、Controller のテストケース中で ルーティング前のパスを指定した場合でもルーティングのコードをカバーできるので、 AppRouter クラス単体でのテストは不要になる。

追記ここまで


Slim3 の AppRouter のテストはどう書けば良いのだろう。 そう思って ControllerTester とか FrontController 等のソースを見たら こんな感じの処理になっていた。

  • RouterImpl#addRouting() した順に from とパスを比較。
  • マッチしたら to に RequestDispatcher#forward() 。
  • どれにもマッチしなかったら、パスに該当する Controller で処理。

AppRouter のテストは、from パスで呼んだら to に forward される事が 確認できれば良いので、以下の様に書いてみた。

public class AppRouter extends RouterImpl {
    public AppRouter() {
        addRouting("/list/{page}", "/list?page={page}");
        addRouting("/list/{type}/{page}", "/list?type={type}&page={page}");
    }
}
public class AppRouterTest extends ControllerTestCase {

    @Test
    public void listPage() throws Exception {
        tester.start("/list/12");
        assertThat(tester.isRedirect(), is(false));
        assertThat(tester.getDestinationPath(), is("/list?page=12"));
    }

    @Test
    public void listTypePage() throws Exception {
        tester.start("/list/science/7");
        assertThat(tester.isRedirect(), is(false));
        assertThat(tester.getDestinationPath(), is("/list?type=science&page=7"));
    }

    @Test
    public void list() throws Exception {
        tester.start("/list");
        assertThat(tester.isRedirect(), is(false));
        assertThat(tester.getDestinationPath(), is(nullValue()));
        assertThat(tester.getController(), is(instanceOf(ListController.class)));
    }
}

環境: Slim3 1.0.5 / Appengine SDK 1.3.6

スポンサーサイト

« Slim3 のルータを拡張するサンプル|Top|CentOS 5.3 および 5.4 インストールカーネルのチェックサム »

コメント

コメントの投稿

管理者にだけ表示を許可する

トラックバック

http://snbhsmt.blog110.fc2.com/tb.php/124-36937628

Top

HOME

snbhsmt

Author:snbhsmt
Google Profiles

http://www.ksky.ne.jp/~snbhsmt/

全ての記事を表示する

この人とブロともになる

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。