为什么这个Objectify代码返回1个对象的列表而不是3?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么这个Objectify代码返回1个对象的列表而不是3?相关的知识,希望对你有一定的参考价值。
我正在尝试为使用Objectify访问数据存储区的GAE应用程序设置单元测试框架。编写了这个测试,当在本地环境中执行时,它失败了。
以下是代码:
public class ObjectifyTest {
private final LocalServiceTestHelper helper =
new LocalServiceTestHelper(new LocalDatastoreServiceTestConfig(),
new LocalMemcacheServiceTestConfig());
private Closeable ofySession;
@Before
public void setUp() {
helper.setUp();
ofySession = ObjectifyService.begin();
}
@After
public void tearDown() {
ofySession.close();
helper.tearDown();
}
@Test
public void testApiHandlerGetTrackerTag() {
Date now = new Date();
TrackerTag tag1= new TrackerTag();
tag1.setHash("...");
TrackerTag tag2= new TrackerTag();
tag2.setHash("...");
TrackerTag tag3= new TrackerTag();
tag3.setHash("...");
OfyService.ofy().save().entities(tag1, tag2, tag3).now();
assertEquals(3,OfyService.ofy().load().type(TrackerTag .class).list().size());
}
}
这个测试在assertEquals(...)失败,因为对Objectify的调用会返回一个大小为1的列表,而不是预期的3.所有想法都是为什么?
答案
LocalServiceTestHelper
的默认行为是模拟最终的一致性。在编写测试时,这通常不是您想要的。您可以通过在传递给助手的setApplyAllHighRepJobPolicy()
对象上调用LocalDatastoreServiceTestConfig
来强制测试行为达到强一致性。
以上是关于为什么这个Objectify代码返回1个对象的列表而不是3?的主要内容,如果未能解决你的问题,请参考以下文章