如何在JUnit测试中使用AppStats? (Google App Engine)

时间:2013-04-17 07:43:55

标签: java google-app-engine junit appstats

我正在为Google App Engine实施一个项目。

此时我有以下设置:

  • 我有几个servlet可以将一些数据提供给客户端应用程序(例如Android / iOS客户端)
  • 为了测试这个servlet,我创建了访问这个servlet的junit测试。
  • 在servlet内部有一些逻辑来确定我们是在运行测试还是从客户端进行实际调用。如果我们在本地计算机上运行测试,我们初始化LocalServiceTestHelper以使数据存储,内存缓存等工作。

一切正常。

现在出现了问题。当我将AppStats过滤器添加到我的web.xml时,这也适用于在locale junit测试中使用它们的servlet。但AppStats过滤器不起作用。我运行测试时得到以下堆栈跟踪:

java.lang.NullPointerException
    at com.google.appengine.tools.appstats.Recorder.checkNotNull(Recorder.java:378)
    at com.google.appengine.tools.appstats.Recorder.<init>(Recorder.java:210)
    at com.google.appengine.tools.appstats.Recorder.<init>(Recorder.java:200)
    at com.google.appengine.tools.appstats.AppstatsFilter.init(AppstatsFilter.java:183)
    at org.mortbay.jetty.servlet.FilterHolder.doStart(FilterHolder.java:97)
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:39)
    at org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:593)
    at org.mortbay.jetty.servlet.Context.startContext(Context.java:140)
    at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1220)
    at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:513)
    at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:448)
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:39)
    at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130)
    at org.mortbay.jetty.handler.RequestLogHandler.doStart(RequestLogHandler.java:115)
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:39)
    at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130)
    at org.mortbay.jetty.Server.doStart(Server.java:222)
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:39)
    at com.google.gwt.dev.shell.jetty.JettyLauncher.start(JettyLauncher.java:672)
    at com.google.gwt.dev.DevMode.doStartUpServer(DevMode.java:509)
    at com.google.gwt.dev.DevModeBase.startUp(DevModeBase.java:1093)
    at com.google.gwt.junit.JUnitShell.getUnitTestShell(JUnitShell.java:707)
    at com.google.gwt.junit.JUnitShell.runTest(JUnitShell.java:652)
    at com.google.gwt.junit.client.GWTTestCase.runTest(GWTTestCase.java:441)
    at junit.framework.TestCase.runBare(TestCase.java:141)
    at junit.framework.TestResult$1.protect(TestResult.java:122)
    at junit.framework.TestResult.runProtected(TestResult.java:142)
    at junit.framework.TestResult.run(TestResult.java:125)
    at junit.framework.TestCase.run(TestCase.java:129)
    at com.google.gwt.junit.client.GWTTestCase.run(GWTTestCase.java:296)
    at junit.framework.TestSuite.runTest(TestSuite.java:255)
    at junit.framework.TestSuite.run(TestSuite.java:250)
    at junit.framework.TestSuite.runTest(TestSuite.java:255)
    at junit.framework.TestSuite.run(TestSuite.java:250)
    at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.run(JUnitTestRunner.java:518)
    at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.launch(JUnitTestRunner.java:1052)
    at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.main(JUnitTestRunner.java:906)

任何人都知道AppStats为什么会出现NullPointerException?

据我所知,我有两个选择:

  1. 让AppStats过滤器在我当前的junit测试中工作。
  2. 为我的语言环境junit测试禁用AppStats过滤器,但保持活动状态以正常调用servlet。
  3. 两者都很好,但我更愿意选择选项1.


    2013年4月19日更新:

0 个答案:

没有答案