我有依赖于 Google App Engine 的 Channel API 的 Java servlet。我正在尝试为该代码编写单元测试,但我对如何编写存根客户端以接收来自 servlet 的响应消息感到非常困惑,而不是我总是不得不依赖使用实际网页作为我的测试客户端。我的 servlet 非常简单:
ChannelService channelService = ChannelServiceFactory.getChannelService();
channelService.sendMessage(new ChannelMessage(someKey, "ECHO: " + someMsg));
通常,我在我的测试客户端(一个网页)中阅读此内容。但是,我想编写可以使用 jUnit 或 TestNG 等框架进行测试的单元测试。在阅读了 Google关于对其 Java 服务进行单元测试的页面后,我尝试了一些方法,例如在我的测试类中使用LocalServiceTestHelper对象并使用LocalChannelServiceTestConfig对象对其进行配置。这样做的结果是我的测试类可以创建 的实例LocalChannelService
,该类似乎实现与 相同的方法ChannelService
。
然而:
- 两个类之间没有任何稳健的关系(不实现类似的接口,不在同一个类层次结构中......)。使我无法将 LocalChannelService 对象作为模拟对象注入到我的 servlet 中。
- LocalChannelService API 上没有任何文档(非常感谢,Google)。
- 他们的本地单元测试页面上也没有关于如何测试 Channel API 的文档(再次感谢 Google)
所以后来我看到了这篇关于如何在 Java 代码中进行测试的文章。ChannelService
不幸的是,给出的唯一相关答案是Python。好吧,你瞧,谷歌确实为 Python GAE 服务器开发人员提供了为谷歌服务编写存根客户端的工具,正如他们的Python 本地单元测试指南中所述。令人难以置信的是,他们竟然忽略了为 Java 做同样的事情!
既然我已经摆脱了所有这些(如果我听起来有点慌张,请道歉),我真的很想知道,依赖 Google App Engine 的 Channel API 测试 Java 代码的最佳方法是什么?我真的希望依靠测试工具而不是网页。我是否必须以某种方式从 Java 调用 Google 的Javascript Client for Channel API?必须有更好的方法来使用模拟对象或存根。
更新 1
使用了更好的名称,“Google App Engine”而不是“App Engine”