我已经为谷歌应用引擎编写了验收测试。但每当我执行测试时,我都会遇到以下异常
java.lang.NullPointerException: No API environment is registered for this thread.
at com.google.appengine.api.datastore.DatastoreApiHelper.getCurrentAppId(DatastoreApiHelper.java:180)
at com.google.appengine.api.datastore.DatastoreApiHelper.getCurrentAppIdNamespace(DatastoreApiHelper.java:196)
at com.google.appengine.api.datastore.Query.<init>(Query.java:208)
at com.google.appengine.api.datastore.Query.<init>(Query.java:139)
at com.google.appengine.datanucleus.query.DatastoreQuery.compile(DatastoreQuery.java:236)
at com.google.appengine.datanucleus.query.JDOQLQuery.performExecute(JDOQLQuery.java:158)
at org.datanucleus.store.query.Query.executeQuery(Query.java:1789)
at org.datanucleus.store.query.Query.executeWithArray(Query.java:1666)
at org.datanucleus.store.query.Query.execute(Query.java:1639)
at org.datanucleus.api.jdo.JDOQuery.execute(JDOQuery.java:221)
at com.teamsuccesso.campaignmonitor.dao.impl.SimpleQueryDaoImpl.getObjectListUsingQuery(SimpleQueryDaoImpl.java:189)
at com.teamsuccesso.campaignmonitor.service.user.impl.UserServiceImpl.saveUser(UserServiceImpl.java:18)
at com.teamsuccesso.campaignmonitor.controller.user.UserController.createAdmin(UserController.java:62)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:349)
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:300)
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:133)
... 43 more
以下是我的代码
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextHierarchy({
@ContextConfiguration(locations = { "file:src/main/webapp/WEB-INF/spring/dispatcher-servlet.xml" }) })
public class AT_AdGroupController {
@SuppressWarnings("unused")
private MockHttpSession session = new MockHttpSession();
private final LocalServiceTestHelper helper = new LocalServiceTestHelper(
new LocalDatastoreServiceTestConfig().setDefaultHighRepJobPolicyUnappliedJobPercentage(1).setStoreDelayMs(0));
@Autowired
private WebApplicationContext webContext;
private MockMvc mockMVC;
@SuppressWarnings("unused")
private static ObjectMapper mapper;
@BeforeClass
public static void startUp() {
mapper = new ObjectMapper();
}
@Before
public void testSetup() {
MockitoAnnotations.initMocks(this);
helper.setUp();
this.mockMVC = MockMvcBuilders.webAppContextSetup(webContext).build();
}
@Test
public void testSaveAd() throws Exception {
CommonAdBean ad = new CommonAdBean();
ad.setAdType("FaceBook");
ad.setAdName("AdName");
ad.setDateOfReport("Mon Oct 17 2016 17:26:36 GMT+0530 (India Standard Time)");
ad.setReportingStarts("1991-01-01");
ad.setTreportingEnds("1991-01-22");
ad.setStarts("1991-10-11");
ad.setEnds("01-01-1991");
String inputJSon = new GsonBuilder().serializeNulls().create().toJson(ad);
System.out.println("InPut:" + inputJSon);
MvcResult returnValue = this.mockMVC
.perform(org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post("/adgroups/1")
.contentType(MediaType.APPLICATION_JSON).content(inputJSon.getBytes()))
.andExpect(org.springframework.test.web.servlet.result.MockMvcResultMatchers.status().isOk())
.andReturn();
System.out.println("OutPut:" + returnValue.getResponse().getContentAsString());
returnValue = this.mockMVC
.perform(org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post("/adgroups/1")
.contentType(MediaType.APPLICATION_JSON).content(inputJSon.getBytes()))
.andExpect(org.springframework.test.web.servlet.result.MockMvcResultMatchers.status().isOk())
.andReturn();
System.out.println("OutPut:" + returnValue.getResponse().getContentAsString());
AdBean adbean = new GsonBuilder().serializeNulls().create().fromJson(returnValue.getResponse().getContentAsString(), AdBean.class);
assertNotNull(adbean.getId());
}
}
对于依赖我正在使用maven并且我添加了所需的所有依赖项。以下是我添加的依赖项
我的appengine版本是1.9.44,我也使用spring mvc
答案 0 :(得分:0)
我认为你的问题与这个问题有关:
How do I register API environment for Datastore in GAE Flexible Environment?
您需要使用最新的库来在灵活的环境中访问数据存储区。
您可以在此处找到项目home page和github repository。