GWT‎ > ‎

GWTでのJunitTest

GWTでは GWTTestCaseを使ってJUnitを用いたモジュールのテストが可能です。

詳しくは 公式ドキュメント を見てみましょう。

GWTTestCaseと普通のTestCaseとの違い

モジュールのテストが可能です

GWTクラスのテストが可能

同じJava言語とはいえ、Widgetを始め、ClientBundleなど普通のJavaとしてはインスタンス化できないクラスが沢山あります。
こういうクラスのテストは、GWTモジュールとして起動してテストするGWTTestCaseでしかできません。

asyncのGWT-RPCもテストできる

Servletとして送り先を起動してテストできます。

  public void testGreetingService() {
    GreetingServiceAsync greetingService = GWT.create(GreetingService.class);
    ServiceDefTarget target = (ServiceDefTarget) greetingService;
    target.setServiceEntryPoint(GWT.getModuleBaseURL() + "/test/greet");

    delayTestFinish(10000);

    greetingService.greetServer("GWT User", new AsyncCallback<String>() {
      public void onFailure(Throwable caught) {
        fail("Request failure: " + caught.getMessage());
      }

      public void onSuccess(String result) {
        assertTrue(result.startsWith("Hello, GWT User!"));
        finishTest();
      }
    });
  }

ドキュメントによるとうまくいかないケースもあるようです。

Devモードでテストできる

Devモードでテストできるので高速にテスト可能です。
(もちろんProductionモードでもテスト可能です。この場合、テストの前にコンパイルします)

テストできないこと

Layout部分はテストできません。
ページにアクセスして、ボタンクリックしたら、フォーム内容が変わっているのを確認するというようなことはできません。
こういう動作テストは通常のHtmlUnitCanoo WebTestなどを用いたテストで行います

テストの作り方

既存のGWT Projectからテストの作成

gwt.xmlの作成

おそらくtestというフォルダーがすでにProject中あります。
メインモージュールと同じフォルダー構成になっていると思います。

そこのclientの上のフォルダーに新しく新規でModuleを作成します。
モジュール名は何でもかまいません。この時のinhertitmodule欄に、テスト元のモジュールを選びます。
するとモジュール名.gwt.xmlというファイルができます。
RPCもテストする場合
Servletのマッピングも記述します。
<?xml version="1.0" encoding="UTF-8"?>
<module>
  <!-- Inherit our applications main module.                      -->
  <inherits name='tmp.main'/>

  <!-- Specify the path to any remote services.                   -->
  <servlet path="/test/greet" class="tmp.server.GreetingServiceImpl" />

</module>

UnitTestの作成


clientパッケージからGWTTestCaseを拡張したJUnitを作成します。
この時、ついでにtestフォルダーを新規source folderでtestを指定して、source folderにしておきます。

そして、getModuleName()を上書きしたクラスを作成します。返し値はさきほど作成したテストモジュール名です。

public String getModuleName() {
return "test.mytest";
}

これでGWT Unit Testからテスト実行できるはずです。
公式ドキュメントにあるようなsrcやtestフォルダーは最初から追加されている気がします。

一度、テストコード付きのProjectを作成して、見比べてみるといいでしょう。

テストコード付きのProjectを作成

GWT付属のコマンド webAppCreatorを使って、最初からテストコードを含むProjectを作成できます。
これは、WebAppCreator コマンドのオプションに、junit.jarの場所を指定して実行します。

WebAppCreatorは、通常Eclipseで作業していると
GWT2.0.3のプラグインですと、以下のフォルダーにあります。
C:\eclipse3.5\plugins\com.google.gwt.eclipse.sdkbundle.2.0.3_2.0.3.v201002191036\gwt-2.0.3
JUnitも
C:\eclipse3.5\plugins\org.junit_3.8.2.v20090203-1005 
とかにあります。

注意事項

super-source

どうもプロジェクト直下のsuperフォルダーにはテストは対応していないような気がする
直下のsuperフォルダーはやめて、パッケージのsuperは移動した方がよさそうだ。
Comments