2014-03-26 1 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, но пример присваивает результаты общему объекту «Row».

Было бы здорово иметь утилиту, которая записывает значения строк в заданный объект домена, используя имена полей из первой строки.

+0

Я не понимаю, в чем вопрос. Вы говорите о том, что синтаксис таблицы данных за пределами Spock? Это потребует, чтобы вы реализовали плагин компилятора Groovy, такой как Spock. –

+0

Нет, я хочу построить граф объектов, используя табличные данные в тесте spock. Я обновлю код, чтобы попытаться сделать его более понятным. Таблицы настолько читаемы в Споке. Чтобы иметь возможность использовать тот же формат для заполнения списка объектов, было бы здорово. – Ben

+0

Единственный способ добиться этого - развить Спок. –

ответ

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 
} 
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 
} 

Вы можете пользовательский логика для преобразования в Quote