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」というより適切な名前を使用しました