2016-01-02 3 views
1

Когда методы тестирования в спецификации Spock используют одни и те же данные, есть ли способ быстрого доступа, чтобы не повторять один и тот же блок where в каждом методе?Обмен таблицами данных между методами тестирования Спока

Фактически, это было бы эквивалентно тому, чтобы иметь уровень where, а не один за «функцию».

Например, см способ, где блок повторяется в каждом методе испытаний («особенность») ниже:

ReindeerSpec extends Specification { 

    List<Reindeer> reindeers() { 
     [makeReindeerOneWay('donner'), makeReindeerSomeOtherWay('blitzen')] 
    } 

    def 'some test'(Reindeer reindeer) { 

     expect: 
     // some thing about this reindeer 

     where: 
     reindeer << reindeers() 

    } 

    def 'some other test'(Reindeer reindeer) { 

     expect: 
     // some other thing about this reindeer 

     where: 
     reindeer << reindeers() 

    } 

} 
+1

Если вы нашли мой ответ полезным, пожалуйста, примите его. – Opal

+0

@Opal Большое спасибо за публикацию. Я потратил некоторое время на изучение этого и пришел к расширению Spock, который может быть тем, что мне нужно. –

ответ

2

Нет там нет такого способа. Блок where должен присутствовать в конце метода, в котором используется тестирование данных с использованием данных.

1

@ Opal - это правильный способ сделать это. Однако после дополнительного копания я обнаружил, что Spock имеет богатый API расширения. Недостатком является то, что официальная документация отсутствует, а примеры - скудные и, как правило, несколько лет.

В очень грубо говоря, и с той оговоркой, что я на самом деле не пробовал следующий, подход может повлечь за собой:

Реализовать ExtensionAnnotation и связанного с ним AbstractAnnotationDrivenExtension. Когда вызывается AbstractAnnotationDrivenExtension.visitSpec(), модифицируйте SpecInfo, добавив DataProviderInfo в каждую FeatureInfo. Аннотации будут применяться один раз, возможно, на уровне Spec или, может быть, на методе предоставления данных (в моем примере reindeers().

Если кто-то, у кого есть опыт внедрения расширений, должен прокомментировать этот подход или предоставить лучшую альтернативу, я

Смежные вопросы