3

GoogleAppEngineのChannelAPIに依存するJavaサーブレットがあります。そのコードの単体テストを作成しようとしていますが、テストクライアントとして実際のWebページを使用することに常に依存するのではなく、サーブレットから応答メッセージを受信するスタブクライアントを作成する方法にかなり困惑しています。私のサーブレットは非常に単純です。

ChannelService channelService = ChannelServiceFactory.getChannelService();
channelService.sendMessage(new ChannelMessage(someKey, "ECHO: " + someMsg));

通常、これはWebページであるテストクライアントで読みます。しかし、jUnitやTestNGなどのフレームワークを使用してテストできる単体テストを作成したいと思います。Javaサービスの単体テストに関するGoogleのページを読んだ後、テストクラスでLocalServiceTestHelperオブジェクトを使用して、LocalChannelServiceTestConfigオブジェクトで構成するなどの方法を試しました。この結果、私のテストクラスはLocalChannelService、と同じメソッドを実装しているように見えるクラスのインスタンスを作成できますChannelService

でも:

  • どちらのクラスも相互に強固な関係はありません(同様のインターフェースを実装しないでください。同じクラス階層にありません...)。LocalChannelServiceオブジェクトをモックオブジェクトとしてサーブレットに挿入できなくなります。
  • LocalChannelService APIに関するドキュメントはありません(Googleに感謝します)。
  • また、チャネルAPIをテストする方法については、ローカルユニットテストページにドキュメントがありません(繰り返しになりますが、Googleに感謝します)

そこで、Javaコードでテストする方法についてこの投稿に出くわしました。ChannelService残念ながら、与えられた唯一の関連する答えはPythonに対するものでした。見よ、Googleは確かに、 Pythonローカルユニットテストガイドの概要にあるように、PythonGAEサーバー開発者にGoogleサービスのスタブクライアントを作成するためのツールを提供しています。彼らがJavaに対して同じことを怠ったなんて信じられない!


胸がいっぱいになったので(少し慌てて聞こえたらお詫びします)、本当に知りたいのですが、Google AppEngineのChannelAPIに依存するJavaコードをテストするための最良の方法は何ですか?私は本当にウェブページの代わりにテストツールに頼りたいです。どういうわけか、JavaからGoogleのJavascript Client for Channel APIを呼び出す必要がありますか?モックオブジェクトまたはスタブを使用できるより良い方法があるはずです。


アップデート1

「AppEngine」だけでなく、「GoogleAppEngine」というより適切な名前を使用しました

4

2 に答える 2

4

LocalServiceTestHelperからLocalChannelServiceを取得し、それに偽のクライアントを接続して、そこからメッセージを取得できます。

    LocalChannelService svc = (LocalChannelService) LocalServiceTestHelper.getLocalService("channel");
    ChannelManager channelManager = svc.getChannelManager();
    String connectionId = channelManager.connectClient(token);

    // send a message

    String message = channelManager.getNextClientMessage(token, connectionId);
    assertEquals("123", message);
于 2013-05-20T20:22:23.177 に答える
0

これらは、ChannelAPIの単体テストに関する私の考えです。

  1. モックは必要ありません。実際のAPIを使用するだけです。それが機能するふりをするだけです。メッセージの送信に失敗しても失敗は返されないため、とにかくそれをテストすることはできません。

  2. バックアップをとってください。ChannelAPIに頼ることはできないと思います。メッセージが表示されない。個人的には、Channel APIほど応答性が高くないポーリングAPIのように、バックアップが必要だと思いますが、少なくとも機能します。

  3. バックアップAPIの単体テスト。

  4. Seleniumを使用して、ブラウザーでChannelAPIをテストします。

于 2012-10-01T21:37:26.407 に答える