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

时间:2014-03-26 22:35:00

标签: groovy dsl spock

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

来自spock docs的例子:

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
}

已经看到有人采取某种方式执行此操作here,但该示例将结果分配给一般的“行”对象。

使用第一行中的字段名称,有一个将行值写入给定域对象的实用程序会很棒。

2 个答案:

答案 0 :(得分:1)

以下是使用Groovy DSL的方法:http://tux2323.blogspot.com/2013/04/simple-table-dsl-in-groovy.html

使用链接中的示例

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
}

您可以使用自定义逻辑将Row转换为Quote

答案 1 :(得分:1)

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

它被称为GroovyTables。位于:https://github.com/tools4j/groovy-tables

它可用于填充键入的对象列表。例如

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
}