2014-03-26 41 views
0

已經使用Spock一個公平的位,並且非常喜歡在輸入/輸出場景的測試中使用表的能力。從斯波克文檔從groovy中的表格數據填充域對象

例如:

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,但該示例將結果分配給一般的「行」對象。

如果有一個實用程序將行值寫入給定的域對象,使用第一行的字段名稱將非常棒。

+0

我不明白問題是什麼。您是否在談論在Spock之外使用相同的數據表語法?這需要你實現一個像Spock那樣的Groovy編譯器插件。 –

+0

不,我的意思是能夠使用Spock測試中的表格數據來構建對象圖。我將更新上面的代碼以嘗試使其更清晰。這些表在Spock中非常易讀。爲了能夠使用相同的格式來填充對象列表將是很好的。 – Ben

+0

完成此操作的唯一方法是分叉Spock。 –

回答

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 
}