【发布时间】:2018-05-27 20:17:44
【问题描述】:
AppEngine Objectify Java 单元测试给出了一个奇怪的会话缓存错误,如下所述。
测试用例:
private final LocalServiceTestHelper helper = new LocalServiceTestHelper(
new LocalDatastoreServiceTestConfig());
protected Closeable session;
@Before
public void setUp() throws Exception {
helper.setUp();
ObjectifyService.setFactory(new ObjectifyFactory());
ObjectifyService.register(UserData.class);
session = ObjectifyService.begin();
}
@After
public void tearDown() throws Exception {
session.close();
helper.tearDown();
}
@Test
public void testUserDataQuery throws Exception {
...
saveUserData();
...
getUserData();
...
}
调用 1:
UserData saveUserData {
...
UserData userData = (UserData) ofy().load().key(key).now();
...
// UserData is modified, the modifications are not stored in datastore,
// as those are temporary.
return userData;
}
呼叫 2:
UserData getUserData {
...
UserData userData = (UserData) ofy().load().key(key).now();
...
// Return the datastore saved UserData object.
return userData;
}
执行单元测试用例时,saveUserData 调用中所做的修改在getUserData 查询中可见。即使 ofy().load() 已被调用,UserData 也不会从数据存储中加载,而是从缓存条目中提供。
我已尝试调用ofy().clear() 来清除会话缓存。这并不是在所有情况下都避免错误。
这仅发生在单元测试环境中,而不是在开发或生产服务器中。
【问题讨论】:
标签: google-app-engine junit4 objectify