今回もtesterパッケージを読みました。
今回はMockXXX.javaとHeaderUtil.java、UrlFetchHandler.javaでした。
MockXXX.javaに関しては、リクエスト、レスポンスを擬似的に再現するための
もので、中身もgetter/setterばかりで特にこれといったものはありませんでした。
ただし、MockHttpServletRequestに関してはHeaderなども変更できるようなので、
例えばjsonのリクエストをテストする場合は事前にHeaderを書き換えた状態で
テストを行うことも可能な感じがしました。
後は、cron jobの実行だとヘッダに”X-AppEngine-Cron: true”が付く事に
なっていますから、手動で実行した時は無視する処理をいれている場合は
Controllerの実行前にHeaderを追加してからテストするという事も
可能だと思います。
HeaderUtilも時刻のフォーマットが定義されているだけで、これも直接利用する事は
無さそうです。
UrlFetchHandlerはinterfaceで、中身を自分で実装する必要があります。
Slim3Demoにもこのクラスを使ったDemoは存在していないようなので、
そもそも利用していないのか?という話になりました。
本題に移ると、これは実際に動作の確認はしていませんが、
アプリケーションでGoogle App EngineのURL Fetch APIを利用した時の
外部サイトのテストで使うために利用するようです。
interfaceを実装する形になりますから、テストデータは自由に作ることができます。
恐らく、以下のようなテストコードになると思います。※以下のコードは未検証です。
@Test public void URLFetchAPIを使うコントローラのテスト() throws Exception { tester.setUrlFetchHandler(new HogeUrlFetchHandler()); tester.start("/urlfetchsample/"); AddController controller = tester.getController(); assertThat(controller, is(notNullValue())); assertThat(tester.isRedirect(), is(true)); assertThat(tester.getDestinationPath(), is("/")); }
URL Fetch API用のHandlerオブジェクト ※以下のコードは未検証です。
public class HogeUrlFetchHandler() implements UrlFetchHandler { public byte[] getContent(URLFetchRequest request) throws IOException { String strResponse = "何かのデータ"; return strResponse.getBytes("UTF-8"); } public int getStatusCode(URLFetchRequest request) throws IOException { return HttpServletResponse.SC_OK; } }
昨日の段階では「これを利用する事はあるかな?」という話になりましたが、
既に動作中のWebAPIでテストを行う場合は、URLFetchHandlerは
不要なのかもしれませんが、
動作中のAPIだと実行時点でデータが変わったりするのでテストの結果が
実行するたびに変わってしまうという結果に陥りそうなので
作るべきかな?と思ったりしています。
あとは、WebAPIも作成途中でテストデータが無いと言った時も利用することに
なるでしょう。
今回は中身も大した内容ではなかったので、テストコードをどれくらい書くか?
みたいな話題になりました。
(読書会での結論は「不安な所をテストする」と言われているので、「不安がなくなるまで書け」ば良いようです。)
さて、次回(#12)はorg.slim3.controller.routerを読んで、最終回となります。
ご興味がありましたら、ご参加下さい。
0 件のコメント:
コメントを投稿