gpt4 book ai didi

java - NullPointerException 在 Google App Engine LocalSErviceTestHelper 上调用 tearDown()

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:31:58 24 4
gpt4 key购买 nike

我正在为严重依赖 Google App Engine 服务(例如 Memcache 和 Datastore)的 Google App Engine Java 应用程序编写测试(集成和单元)。为了使用这些服务在本地测试我的应用程序,我在所有测试用例的父类中都有这一行:

private final LocalServiceTestHelper helper = new LocalServiceTestHelper(new LocalDatastoreServiceTestConfig(), new LocalMemcacheServiceTestConfig());

我用这个函数调用开始每个测试(通过 TestNG 的 @BeforeMethod 注释):

helper.setUp();

然后我用这个函数调用结束每个测试(通过 TestNG 的 @AfterMethod 注释):

helper.tearDown();

(这里引用了 TestNG annotationslocal unit testing for Google App Engine's Java Runtime ,以备不时之需。特别是后一个链接,请注意我的代码严格遵循 Google 给出的示例)

需要注意的一件事是我在 Java 应用程序中的一个 servlet 使用了 MemcacheService 的一个实例。它由 Guice 注入(inject)到 servlet 的构造函数中。

现在,我构建我的代码并通过调用 mvn clean install 运行它,这将启动一个 Jetty 实例并在代码完成后运行我的测试编译。 令我懊恼的是,我在 TestNG 报告大量测试失败之前打印了这个堆栈跟踪:

SEVERE: Received exception tearing down config of type com.google.appengine.tools.development.testing.LocalMemcacheServiceTestConfig
java.lang.NullPointerException
at com.google.appengine.tools.development.testing.LocalServiceTestHelper.getLocalService(LocalServiceTestHelper.java:495)
at com.google.appengine.tools.development.testing.LocalMemcacheServiceTestConfig.getLocalMemcacheService(LocalMemcacheServiceTestConfig.java:71)
at com.google.appengine.tools.development.testing.LocalMemcacheServiceTestConfig.tearDown(LocalMemcacheServiceTestConfig.java:47)
at com.google.appengine.tools.development.testing.LocalServiceTestHelper.tearDown(LocalServiceTestHelper.java:438)
at com.ea.pogosocial.AbstractTest.tearDown(AbstractTest.java:65)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:616)
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
at org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.java:564)
at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:213)
at org.testng.internal.Invoker.invokeMethod(Invoker.java:796)
at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:907)
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1237)
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:679)

我已经尝试了几乎所有我能想到的方法来解决这个问题,但我仍然遇到了这个 tearDown() 问题,这真的让我很困惑。除了 put() 和 get() 之外,我没有对我的 servlet 中的内存缓存实例做任何花哨的事情。有没有人知道我应该做什么?

如果需要更多信息或代码,我很乐意提供。需要注意的一件事:当我使用 mvn gae:run 启动我的 Jetty 服务器并通过 Eclipse 执行 TestNG 测试时,我没有遇到这个问题。也许这是因为我的 servlet 被注入(inject)了内存缓存的非本地单元测试助手实例,而是内存缓存服务的实际版本。

最佳答案

我有这个完全相同的错误。我遇到的问题是 Google App Engine SDK 依赖项的版本号不匹配

我有:

  • appengine-api-1.0-sdk: 1.8.1.1
  • appengine-api-labs:1.8.1.1
  • appengine-api-stubs:1.8.1.1
  • 应用引擎测试:1.8.1.1
  • appengine-tools-sdk:1.7.2

将 appengine-tools-sdk 更新为与其余依赖项相同的版本后,我的测试再次开始通过。

关于java - NullPointerException 在 Google App Engine LocalSErviceTestHelper 上调用 tearDown(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12809336/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com