使用动态 JVM 语言创建存根数据结构的示例?

Posted

技术标签:

【中文标题】使用动态 JVM 语言创建存根数据结构的示例?【英文标题】:Examples for creating stub data structures with dynamic JVM Languages? 【发布时间】:2010-09-22 09:14:31 【问题描述】:

多年来,我想我已经看到并尝试了所有可以为复杂对象图生成存根数据结构(假数据)的方法。在 java 中总是很麻烦。

   *    *    *    *
A---B----C----D----E

(请原谅廉价的 UML)

关键问题是值之间存在一定的关系,因此 C 的某个实例可能暗示 E 的给定值。

我所看到的任何在 Java 中应用单个模式或一组模式来解决此问题的尝试最终都会变得混乱。

我正在考虑 groovy 或任何动态 vm 语言是否可以做得更好。使用闭包应该可以使事情变得更简单。

任何人有这个问题的任何参考/示例(最好)用 groovy 或 scala 很好地解决?

编辑: 我不知道“Object Mother”是模式的名称,但这是我遇到的麻烦:当 Object Mother 生成的对象结构足够复杂时,你总是会得到一个相当对象母体内部的复杂内部结构(或通过组合多个对象母体)。给定一个足够大的目标结构(比如 30 个类),找到实现对象母亲的结构化方法真的很难。既然我知道了模式的名称,我可以更好地用谷歌搜索它;)

【问题讨论】:

Scala 不是动态语言。它具有很多特性,但实际上它比 Java 更加静态和类型安全。 关于你的问题,我真的不确定你在问什么。您是在谈论动态生成的数据来填充数据结构吗? 【参考方案1】:

您可能会发现Object Mother 模式很有用。我已经在我当前的 Groovy/Grails 项目中使用它来帮助我创建示例数据。

它不是特定于 groovy 的,但动态语言通常可以更轻松地使用鸭子类型和闭包创建类似的东西。

【讨论】:

【参考方案2】:

我通常使用构建器模式创建对象母体。

public class ItineraryObjectMother

    Status status;
    private long departureTime;

    public ItineraryObjectMother()
    
        status = new Status("BLAH");
        departureTime = 123456L;
    
    public Itinerary build()
    
        Itinerary itinerary = new Itinerary(status);
        itinerary.setDepartureTime(departureTime);
        return itinerary;
    
    public ItineraryObjectMother status(Status status)
    
        this.status = status;
        return this;
    
    public ItineraryObjectMother departs(long departureTime)
    
        this.departureTime = departureTime;
        return this;
    


那么就可以这样使用了:

Itinerary i1 = new ItineraryObjectMother().departs(1234L).status(someStatus).build();
Itinerary i2 = new ItineraryObjectMother().departs(1234L).build();

正如 Ted 所说,这可以通过动态语言来改进/简化。

【讨论】:

以上是关于使用动态 JVM 语言创建存根数据结构的示例?的主要内容,如果未能解决你的问题,请参考以下文章

创建 C++ 类的存根版本

JVM——类加载机制

JVM类加载机制

JVM内存

如何创建不调用底层对象的构造函数的ScalaMock存根?

PyCharm 中的部分存根