我应该如何/应该设置只读用于测试目的的实体字段?

时间:2015-10-06 21:15:30

标签: java hibernate

这不是关于最近的一个问题,更像是历史问题,我认为我刚刚找到了至少一个答案。我在一家商店工作,其中建筑师坚持要求我们的实体的许多字段是只读的,即没有任何类型的制定者。我的意思是我们正在使用Hibernate,显然你可以将这些字段注释为只读......但他的要求是消除了setter,因此它们无法在不使用Reflection的情况下进行设置。他甚至编写了一套实用工具,使用Reflection设置这些字段进行测试,如果模式发生了变化,你必须扩展它们。我的问题在于它是狗慢,一大堆看似不必要的代码总是在改变。当然可以使用模拟,但如果您的数据非常重要,那么这些模拟也会变得很痛苦。现在我发现了一些看起来很好的答案,但我想听听社区的意见,因为它可能不是最好的答案。首先,我怀疑我们是否应该这样做。

1 个答案:

答案 0 :(得分:0)

你有几种方法:

  • 嘲笑 - 最简单的,例如Mockito图书馆;
  • 构建者 - 仅限制定者+构建验证;
  • package-local setters +测试范围内的同包工厂。

请勿使用:

  • 100500构造函数参数 - 这种方式会导致极难支持的代码。

建设者示例:

interface Model (
    A getA();
    ...
)
public final class ModelBuilder {
    private ModelBuilder() {...}
    public static ModelBuilder newBuilder() {...}

    public ModelBuilder setA(A a) (...) // keep 'a', return 'this'
    ...
    public Model build() {...}
}