【发布时间】:2012-02-27 05:40:20
【问题描述】:
facade.vote(datastoreRecordId, userId);
try{
facade.vote(datastoreRecordId, userId);
fail(); // Expect runtimeexception because voting twice is not allowed
} catch (RuntimeException ex) {}
hasVoted = facade.hasVoted(datastoreRecordId, userId);
我有一个单元测试,测试我的 gae 服务器的外观。 服务器在 localhost 上运行,每次在 setup 方法中都会擦除数据存储区。
我将一个实体放入数据存储区,然后我基本上检查它是否正确持久化!有时它告诉我记录已找到,有时它告诉我它没有找到。 (所以 hasVoted 有时为真有时为假,有时会抛出预期的运行时异常,有时不会)
我尝试使用全局事务,在本地和服务器端同步,并尝试使用单线程 HttpClient。我什至在对我的门面的调用之间放了一些睡眠。我还尝试了 appengine.xml 中的线程开关。
我做了一个方法,我连续运行测试 100 次,有时它有效,有时断言在 4 次运行后失败,有时在 7 次后,(16 是记录哇)它完全随机。我只是无法找出问题所在。当我在远程 appengine 实例上运行测试时,一切正常,即使我在循环中运行了 100 次。除了格式 c: 之外的任何想法?
好吧,我发现了问题,我禁用了 HRD 并在本地转移到主/从,现在一切正常!也许这篇文章可以帮助将来的人。有人了解 HRD 的这种行为吗?
【问题讨论】:
标签: google-app-engine google-cloud-datastore