为什么这个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?的主要内容,如果未能解决你的问题,请参考以下文章

对象化查询以返回属性值列表

按 Ref 对象化过滤器

按列表对象化查询过滤器?

OrderedDictionary 值不返回列表而是返回对象 [重复]

为啥要使用 Objectify 而不是 JDO?

使用 objectify 在实体中搜索子字符串