【问题标题】:Using GAE local testing with Objectify将 GAE 本地测试与 Objectify 一起使用
【发布时间】:2012-10-10 15:55:35
【问题描述】:

我正在尝试使用谷歌应用引擎提供的本地测试助手来对我使用 objectify 的应用进行单元测试。但是,某些测试失败并显示以下消息;

com.google.apphosting.api.ApiProxy$CallNotFoundException: The API package 'datastore_v3' or call 'Put()' was not found.
        at com.google.apphosting.api.ApiProxy$1.get(ApiProxy.java:164)
        at com.google.apphosting.api.ApiProxy$1.get(ApiProxy.java:162)
        at com.google.appengine.api.utils.FutureWrapper.get(FutureWrapper.java:90)
        at com.google.appengine.api.datastore.FutureHelper$CumulativeAggregateFuture.get(FutureHelper.java:145)
        at com.google.appengine.api.utils.FutureWrapper.get(FutureWrapper.java:90)
        at com.googlecode.objectify.impl.ResultAdapter.now(ResultAdapter.java:29)
        at com.googlecode.objectify.util.ResultWrapper.translate(ResultWrapper.java:20)
        at com.googlecode.objectify.util.ResultWrapper.translate(ResultWrapper.java:1)
        at com.googlecode.objectify.util.ResultTranslator.nowUncached(ResultTranslator.java:21)
        at com.googlecode.objectify.util.ResultCache.now(ResultCache.java:27)
        at com.googlecode.objectify.util.ResultWrapper.translate(ResultWrapper.java:20)
        at com.googlecode.objectify.util.ResultWrapper.translate(ResultWrapper.java:1)
        at com.googlecode.objectify.util.ResultTranslator.nowUncached(ResultTranslator.java:21)
        at com.googlecode.objectify.util.ResultCache.now(ResultCache.java:27)

这是我的代码:

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

@BeforeMethod(alwaysRun = true)
public void setUp() {
    helper.setUp();
}

.....
//In class constructor
ObjectifyService.register(SomeClass.class);
.....
@AfterMethod(alwaysRun = true)
public void tearDown() {
    helper.tearDown();
}

public void doTest {
    SomeClass value = ......
    ofy().save().entity(value).now(); //throws error
}

这是我的依赖树:

[INFO] |  +- com.google.guava:guava-collections:jar:r03:compile
[INFO] |  |  +- com.google.guava:guava-annotations:jar:r03:compile
[INFO] |  |  \- com.google.guava:guava-primitives:jar:r03:compile
[INFO] |  |     \- com.google.guava:guava-base:jar:r03:compile
[INFO] |  \- com.google.inject.extensions:guice-servlet:jar:3.0:compile
[INFO] +- com.google.inject:guice:jar:3.0:compile
[INFO] |  +- com.google.api-client:google-api-client:jar:1.11.0-beta:compile
[INFO] |  |  \- com.google.oauth-client:google-oauth-client:jar:1.11.0-beta:compile
[INFO] |  |     +- com.google.code.findbugs:jsr305:jar:1.3.9:compile
[INFO] |  |     \- com.google.guava:guava:jar:11.0.1:compile
[INFO] |  +- com.google.appengine:appengine-api-1.0-sdk:jar:1.7.2:compile
[INFO] |  \- com.googlecode.objectify:objectify:jar:4.0a4:compile
[INFO] |  +- com.google.appengine.orm:datanucleus-appengine:jar:1.0.10:runtime
[INFO] |  \- com.google.appengine:appengine-tools-sdk:jar:1.7.2:compile
[INFO] +- com.google.appengine:appengine-api-labs:jar:1.7.2:test
[INFO] +- com.google.appengine:appengine-api-stubs:jar:1.7.2:test
[INFO] +- com.google.appengine:appengine-testing:jar:1.7.2:test
[INFO] +- com.google.api-client:google-api-client-appengine:jar:1.10.3-beta:compile
[INFO] |  +- com.google.oauth-client:google-oauth-client-appengine:jar:1.10.1-beta:compile
[INFO] |  |  +- com.google.oauth-client:google-oauth-client-servlet:jar:1.10.1-beta:compile
[INFO] |  +- com.google.api-client:google-api-client-servlet:jar:1.10.3-beta:compile
[INFO] |  \- com.google.http-client:google-http-client-appengine:jar:1.10.3-beta:compile
[INFO] |     \- com.google.http-client:google-http-client:jar:1.10.3-beta:compile
[INFO] |        +- com.google.code.gson:gson:jar:2.1:compile
[INFO] |        \- com.google.protobuf:protobuf-java:jar:2.2.0:compile

知道我错过了什么或做错了什么吗?

【问题讨论】:

  • 引用 appengine-api-1.0-sdk:jar:1.7.1 时其他所有版本都是 1.7.2 看起来很可疑。
  • 我修复了 sdk jar 版本,但仍然出现同样的错误。它似乎发生在命名空间更改之后的调用,并且是间歇性的,即每次不同的测试都失败。

标签: google-app-engine objectify


【解决方案1】:


我刚刚重现了这个错误并通过添加以下依赖项来修复它:

    <!--
      GAE libraries for local testing as described here:
      http://code.google.com/appengine/docs/java/howto/unittesting.html
    -->
    <dependency>
        <groupId>com.google.appengine</groupId>
        <artifactId>appengine-api-labs</artifactId>
        <version>${gae.version}</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>com.google.appengine</groupId>
        <artifactId>appengine-api-stubs</artifactId>
        <version>${gae.version}</version>
        <scope>test</scope>
    </dependency>

我使用本地 maven 属性来引用相同的 gae 版本。
希望对您有所帮助
问候

【讨论】:

  • 如果您查看依赖关系树,那些依赖关系已经存在。我最终通过将相关依赖项移到 pom 文件的更高位置并因此具有更高的优先级来克服这个错误。对导致我的问题的早期版本的存根存在传递依赖。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-08
  • 2010-12-16
  • 2015-06-20
  • 2013-11-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多