java - 使用 objectify 实体模型进行模拟测试时的 Ref & Key 问题

标签 java google-app-engine objectify

我不确定我是否应该完全不这样做,但我通常习惯于模拟应用程序的很多区域,并且在我的实体内部使用 Ref 和 Keys 时遇到问题。

我遵循了 docs 中的模式你在实体中使用 ref 但你屏蔽了 ref 以便你可以访问它引用的驱动程序对象,如下所示:

@Entity
class Car {
    @Id Long id;
    @Load Ref<Person> driver;    // Person is an @Entity

    public Person getDriver() { return driver.get(); }
    public void setDriver(Person value) { driver = Ref.create(value); }
}

我的特定场景是与一个导入器合作,我在其中解析 xml 并构建我的实体以准备保存它们。由于我的单元测试只是实际测试 xml 的导入和解析,所以我模拟了我的 dao 实现,这样我就不会真正使用数据存储。

然后我在调用 setDriver 时遇到了问题,它只是创建了一个 Ref 对象。然后我使用 getDriver 方法,该方法将返回 null,因为 Ref.get 直接依赖于数据存储。

有没有人遇到过这个问题,有没有办法创建一个模拟 Ref 对象?我正在考虑在我的实体中不直接引用 Ref,而是引用一个可以提供我在测试中可以控制的 Ref 的辅助类?

最佳答案

选项的简短列表是:

  1. 使用 PowerMock
  2. 添加您自己的 RefCreator 对象
  3. 使用假数据存储而不是模拟

我从不 mock 数据存储层。本地单元测试工具是 GAE 最好的东西之一;它为您提供了一个功能齐全的数据存储区:

https://cloud.google.com/appengine/docs/java/tools/localunittesting

关于java - 使用 objectify 实体模型进行模拟测试时的 Ref & Key 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28559216/

相关文章:

google-app-engine - 自动 NDB 缓存如何工作?

java - objectify v5 按嵌入类中的属性进行查询过滤

带有比较器的 Java 8 流过滤器

java - 使用Jsoup遍历Web

Java:使用新的模式字母扩展 SimpleDateFormat

java - java中数据存储的自动递增实体ID

java - 带有 Objectify 的基本 GAE 应用程序失败

java - 如何使用Spring Cloud Stream实现自定义kafka分区

angularjs - 使用 Go 为 Rest API 返回 0

python - 使用 bulkloader 上传数据