数据存储本地单元测试

时间:2015-08-27 02:44:38

标签: google-cloud-datastore

所有,我是GCD的新手,想要设置我的LocalTestEnvironment。我已经成功安装了GCD本地环境。我正在关注此链接进行一些单元测试https://cloud.google.com/appengine/docs/java/tools/localunittesting

但是,我正在运行简单的跟踪错误,如下面的查询

Exception in thread "main" java.lang.AbstractMethodError: com.google.appengine.tools.development.testing.TestLocalServerEnvironment.enforceApiDeadlines()Z
    at com.google.appengine.tools.development.ApiProxyLocalImpl.makeAsyncCall(ApiProxyLocalImpl.java:206)
    at com.google.apphosting.api.ApiProxy.makeAsyncCall(ApiProxy.java:201)
    at com.google.appengine.api.datastore.DatastoreApiHelper.makeAsyncCall(DatastoreApiHelper.java:106)
    at com.google.appengine.api.datastore.QueryRunnerV3.runQuery(QueryRunnerV3.java:36)
    at com.google.appengine.api.datastore.PreparedQueryImpl.runQuery(PreparedQueryImpl.java:31)
    at com.google.appengine.api.datastore.PreparedQueryImpl.asIterator(PreparedQueryImpl.java:52)
    at com.google.appengine.api.datastore.PreparedMultiQuery$FilteredMultiQueryIterator.makeQueryIterator(PreparedMultiQuery.java:233)
    at com.google.appengine.api.datastore.PreparedMultiQuery$FilteredMultiQueryIterator.<init>(PreparedMultiQuery.java:201)
    at com.google.appengine.api.datastore.PreparedMultiQuery.newFilteredMultiQueryIterator(PreparedMultiQuery.java:425)
    at com.google.appengine.api.datastore.PreparedMultiQuery.asIterator(PreparedMultiQuery.java:418)
    at com.google.appengine.api.datastore.BasePreparedQuery$1.iterator(BasePreparedQuery.java:25)
    at MultiFilterQuery.main(MultiFilterQuery.java:36)

我的测试代码

import com.google.appengine.api.datastore.DatastoreServiceFactory;
import com.google.appengine.api.datastore.DatastoreService;
import com.google.appengine.api.datastore.Query.Filter;
import com.google.appengine.api.datastore.Query.FilterPredicate;
import com.google.appengine.tools.development.testing.LocalDatastoreServiceTestConfig;
import com.google.appengine.tools.development.testing.LocalServiceTestHelper;
import com.google.appengine.api.datastore.Query.FilterOperator;
import com.google.appengine.api.datastore.Query.CompositeFilter;
import com.google.appengine.api.datastore.Query.CompositeFilterOperator;
import com.google.appengine.api.datastore.Query;
import com.google.appengine.api.datastore.PreparedQuery;
import com.google.appengine.api.datastore.Entity;
import com.google.api.services.datastore.*;
import com.google.api.services.datastore.client.Datastore;
import com.google.api.services.datastore.client.DatastoreHelper;

import java.util.*;
import static com.google.api.services.datastore.client.DatastoreHelper.makeValue;

public class MultiFilterQuery {

public static void main(String args[]) {
    //Datastore datastore = null;
//  datastore = DatastoreHelper.getDatastoreFromEnv();
    LocalServiceTestHelper helper =
              new LocalServiceTestHelper(new LocalDatastoreServiceTestConfig());
    helper.setUp();
    DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
    List<String> Dept = Arrays.asList("ECE", "CSE");
    Filter DeptFilter =
              new FilterPredicate("Department",
                                  FilterOperator.IN,
                                  Dept);
    Query q = new Query("StudentMarks").setFilter(DeptFilter);
    PreparedQuery pq = datastore.prepare(q);
    for (Entity result : pq.asIterable()) {
          String firstName = (String) result.getProperty("StudentName");
          String lastName = (String) result.getProperty("Department");
          Long height = (Long) result.getProperty("Email");

          System.out.println(firstName + " " + lastName + ", " + height + " inches tall");
        }
}

}

1 个答案:

答案 0 :(得分:0)

我们试图从外部计算引擎运行它,但是我从其他论坛了解到,用于外部计算引擎的Cloud Datastore API仍然是Beta并且不支持许多功能。此外,Google Compute Engine和Datastore之间似乎存在高延迟。我们决定将Amazon Dynamodb用于应用程序。