从groovy中的表格数据填充域对象

从groovy中的表格数据填充域对象,groovy,dsl,spock,Groovy,Dsl,Spock,我一直在使用Spock,并且非常喜欢在输入/输出场景的测试中使用表的能力 spock文档中的示例: class Math extends Specification { def "maximum of two numbers"(int a, int b, int c) { expect: Math.max(a, b) == c where: a | b | c 1 | 3 | 3 7 | 4

我一直在使用Spock,并且非常喜欢在输入/输出场景的测试中使用表的能力

spock文档中的示例:

class Math extends Specification {
    def "maximum of two numbers"(int a, int b, int c) {
        expect:
        Math.max(a, b) == c

        where:
        a | b | c
        1 | 3 | 3
        7 | 4 | 4
        0 | 0 | 0
    }
}
我在金融行业工作,我们处理很多交易“书籍”

如果能以表格的形式展示这些书,那就太好了

因此,不要使用构建器,例如:

builder.addQuote( 1000000, 1.1220, 1.2230)
       .addQuote( 2000000, 1.1219, 1.2233)
       .addQuote(10000000, 1.1217, 1.2234)
       .addQuote(15000000, 1.1216, 1.2240)
使用某种桌子会很好:

List<Quote> quotes = new ArrayList<Quote>();

MyUtil.insertInto(quotes).fromTable{
    quantity |    bid |    ask
     1000000 | 1.1220 | 1.2230
     2000000 | 1.1219 | 1.2233
    10000000 | 1.1217 | 1.2234
    15000000 | 1.1216 | 1.2240
}
List quotes=new ArrayList();
MyUtil.insertInto(引号).fromTable{
数量|出价|出价
1000000 | 1.1220 | 1.2230
2000000 | 1.1219 | 1.2233
10000000 | 1.1217 | 1.2234
15000000 | 1.1216 | 1.2240
}
我们已经看到有人这样做了,但是示例将结果分配给一个常规的“行”对象


如果有一个实用程序可以使用第一行的字段名将行值写入给定的域对象,那将是一件非常棒的事情。

下面是使用Groovy DSL的方法:

使用链接中的示例

List<Row> rows = TableParser.asListOfRows {
 quantity |    bid |    ask
  1000000 | 1.1220 | 1.2230
  2000000 | 1.1219 | 1.2233
 10000000 | 1.1217 | 1.2234
 15000000 | 1.1216 | 1.2240
}
List rows=TableParser.asListOfRows{
数量|出价|出价
1000000 | 1.1220 | 1.2230
2000000 | 1.1219 | 1.2233
10000000 | 1.1217 | 1.2234
15000000 | 1.1216 | 1.2240
}

您可以使用自定义逻辑将
转换为
引号

我已经编写了一个解决我自己问题的API

它被称为GroovyTables。地址:

它可用于填充对象的类型化列表。e、 g

List<Quote> quotes = GroovyTables.createListOf(Quote).fromTable {
    symbol    | price   | quantity
    "AUD/USD" | 1.0023  | 1200000
    "AUD/USD" | 1.0024  | 1400000
    "AUD/USD" | 1.0026  | 2000000
    "AUD/USD" | 1.0029  | 5000000
}
List quotes=GroovyTables.createListOf(Quote).fromTable{
符号|价格|数量
“澳元/美元”1.0023 1200000
“澳元/美元”1.0024 1400000
“澳元/美元”| 1.0026 | 2000000
“澳元/美元”| 1.0029 | 5000000
}

我不明白问题是什么。您是说在Spock之外使用相同的数据表语法吗?这需要您像Spock一样实现Groovy编译器插件。不,我的意思是能够在Spock测试中使用表格数据构建对象图。我将更新上面的代码以使其更清晰。这些表格在斯波克很容易阅读。能够使用相同的格式填充对象列表将非常好。实现这一点的唯一方法是fork Spock。那么Spock中的表格式是否由groovy编译器插件处理?是的。Spock测试语言的许多方面都由(相同的)Spock编译器插件处理。