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

时间:2008-11-14 16:36:34

标签: java algorithm scala groovy stub-data-generation

多年来,我认为我已经看到并尝试过为复杂对象图生成存根数据结构(伪数据)的所有可能的方法。它总是在java中变得毛茸茸。

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

(原谅廉价的UML)

关键问题是值之间存在某些关系,因此C的某个实例可能意味着给出了E的值。

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

我正在考虑如果groovy或任何动态虚拟语言可以做得更好。应该可以通过闭包使事情变得更简单。

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

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

2 个答案:

答案 0 :(得分:2)

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

这不是特定的常规,但动态语言通常可以使用鸭子打字和闭包更容易创建这样的东西。

答案 1 :(得分:1)

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

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所说,这可以通过动态语言进行改进/简化。