如何jUnit测试实体持久性与HRD没有父关系

时间:2012-09-10 19:40:58

标签: google-app-engine junit

在使用HRD时,我很难找到使用jUnit测试数据存储状态的正确方法。

我的设置:App Engine 1.7.1,HRD设置。我在多个实体上使用交易。在浏览器中以开发模式运行应用程序时,一切正常。

我的jUnit助手:   protected final LocalServiceTestHelper helper = new LocalServiceTestHelper(new LocalDatastoreServiceTestConfig()。setDefaultHighRepJobPolicyUnappliedJobPercentage(50));

问题:我坚持几个实体。他们没有父母,所以我不能一直读取数据存储区以查看它们是否已保存。

问题:如何测试它们是否保存在数据存储区中,因为某些保存操作不会被应用,我无法访问父级以真正检查数据存储区(因为我不使用父关系)?

注意:在使用XG交易时必须使用HRD。

有没有办法'冲洗'待处理的操作?

丹尼尔

2 个答案:

答案 0 :(得分:2)

如果您通过ID或密钥获取实体,即使没有父级,也可以一致地读取实体。 但是,查询不会返回一致的结果。

如果您将配置设置为最终一致,就像您一样,您应该编写测试,以便他们能够处理最终一致的结果。

如果您希望编写测试以使他们期望完全一致的结果,请将未应用的作业百分比设置为0,以使其以完全一致的方式运行(但不能反映它实际运行的方式)。

答案 1 :(得分:2)

可能最好的方法是定义您自己的HighRepJobPolicy,每次都适用,并为您需要的测试注册。在此单元测试docs页面上搜索“注册您自己的”。 / p>

另见discussion

文档页面上的示例显示了如何编写每隔一段时间应用的策略,但您可以编写这些方法的版本,其中所有新的和现有的作业每次都适用。