使用GWT和GAE进行JUnit测试
我想要一些JUnit测试(用GWT创建)来联系一个servlet(里面有GAE调用)。 当我运行测试时,我得到以下堆栈跟踪:
java.lang.NullPointerException at com.google.appengine.api.NamespaceManager.get(NamespaceManager.java:101) at com.google.appengine.api.memcache.BaseMemcacheServiceImpl.getEffectiveNamespace(BaseMemcacheServiceImpl.java:65) at com.google.appengine.api.memcache.AsyncMemcacheServiceImpl.doGet(AsyncMemcacheServiceImpl.java:295) at com.google.appengine.api.memcache.AsyncMemcacheServiceImpl.contains(AsyncMemcacheServiceImpl.java:283) at com.google.appengine.api.memcache.MemcacheServiceImpl.contains(MemcacheServiceImpl.java:44) at com.peerkesoftware.etheria.web.server.model.UpdateTimer.(UpdateTimer.java:17) at com.peerkesoftware.etheria.web.server.UpdateTimerServlet.(UpdateTimerServlet.java:12) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) at java.lang.reflect.Constructor.newInstance(Constructor.java:513) at java.lang.Class.newInstance0(Class.java:355) at java.lang.Class.newInstance(Class.java:308) at org.mortbay.jetty.servlet.Holder.newInstance(Holder.java:153) at org.mortbay.jetty.servlet.ServletHolder.getServlet(ServletHolder.java:339) at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:463) at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:362) at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181) at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:729) at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405) at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) at org.mortbay.jetty.handler.RequestLogHandler.handle(RequestLogHandler.java:49) at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) at org.mortbay.jetty.Server.handle(Server.java:324) at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505) at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:829) at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:513) at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211) at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380) at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395) at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:488)
有人可以向我解释为什么会这样吗? 我该如何解决这个问题? 在运行测试之前是否需要初始化某些内容?
我正在使用GWT版本2.5.1和GAE版本1.7.5。
我的代码可以在GitHub上查看。
我自己弄清楚了。
我使用的解决方案:创建LocalServiceTestHelper并在对servlet进行任何调用之前进行设置。 然后我所有的JUnit测试都是绿色的。
抛出空指针exception的第101行对应于https://code.google.com/p/googleappengine/source/browse/trunk/java/src/main/com/google/appengine/api/NamespaceManager.java
Map attributes =ApiProxy.getCurrentEnvironment().getAttributes();
我猜你的ApiProxy.getCurrentEnvironment()返回null。
解决方案 :将war / WEB-INF / web.xml编辑为ApplicationServlet而不是GAEApplicationServlet。
我想指出,GWT客户端的unit testing不应该在服务器端如此深入地运行。 您应该使用模拟或避免从GWT测试调用服务器端类来保持GWT测试更快和客户端特定。
- Google App Engine Java是否支持TLS> 1.0
- Google ClientLogin身份validation
- 谷歌应用引擎1.6.4在本地较慢?
- IntelliJ上的Google App Engine Java开发?
- 使用HSSF的Apache POI比XSSF快得多 – 下一步是什么?
- Objectify查询filter,如“name contains”
- Google App Engine标准环境 – 未找到控制器方法 – Spring Boot应用程序
- 使用Rhino而不是ScriptEngine在Java中运行Javascript代码
- 如何在不同的浏览器页面中管理多个帐户登录和注销?