gpt4 book ai didi

java - 在 GAE 之外测试 Google App Engine ThreadManager

转载 作者:搜寻专家 更新时间:2023-10-31 20:13:25 25 4
gpt4 key购买 nike

我编写了一个 JUnit (4.10) 单元测试,它对 com.google.appengine.api.ThreadManager 进行以下调用:

ThreadManager.currentRequestThreadFactory();

当这个测试运行时,我从这个 currentRequestThreadFactory 方法中抛出一个 NullPointerException:

Caused by: java.lang.NullPointerException
at com.google.appengine.api.ThreadManager.currentRequestThreadFactory(ThreadManager.java:39)
at com.myapp.server.plumbing.di.BaseModule.providesThreadFactory(BaseModule.java:50)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

当我拉下 ThreadManager 的源代码并查看第 39 行(这是 NPE 的源代码)时,我看到:

public static ThreadFactory currentRequestThreadFactory() {
return (ThreadFactory) ApiProxy.getCurrentEnvironment().getAttributes()
.get(REQUEST_THREAD_FACTORY_ATTR);
}

所以看起来 ApiProxy.getCurrentEnvironment() 是 null,当它的 getAttribute() 方法被调用时,NPE 被抛出。我已经通过在我的单元测试代码中添加一些新的打印语句来确认这一点:

if(ApiProxy.getCurrentEnvironment() == null)
System.out.println("Environment is null.");

我隐约知道 GAE 为其所有服务提供“测试版本”,但无法找到(具体)如何使用和设置它们。所以我问:GAE是否提供这样的测试版本?如果是这样,我如何在此处添加 ApiProxy 测试版本?如果没有,那我有什么选择?我不认为我可以模拟任何一种方法(ThreadManager#currentRequestThreadFactoryApiProxy#getCurrentEnvironment),因为它们都是静态的。提前致谢。

编辑:我看到 SDK 附带了一个 appengine-testing.jar。在这个 JAR 中有一个 ApiProxyLocal.class,我相信ApiProxy 的一个版本,可以在 JUnit 测试期间使用,它可以在不抛出异常的情况下工作NPE。如果是这样(我什至不确定),那么问题是:如何将它注入(inject)我的 ThreadManager 以进行此测试?

最佳答案

如果您按照以下几行设置 LocalServiceTestHelper,您将从 stub 中获得正确的线程。

private static final LocalServiceTestHelper helper = new LocalServiceTestHelper( new    LocalDatastoreServiceTestConfig());

@BeforeClass
public static void initialSetup() {
helper.setUp();
}

@AfterClass
public static void finalTearDown() {
helper.tearDown();
}

关于java - 在 GAE 之外测试 Google App Engine ThreadManager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14688645/

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