Создание наборов тестов в Spring IDE для спецификаций Spock Test

У меня есть сотни тестовых спецификаций, написанных на Spock. Все это функциональные тесты, и их можно запускать независимо. Но я столкнулся с ситуацией, когда мне нужно запустить определенный тест, прежде чем запускать какой-либо другой тест.

Этого было очень легко добиться с помощью Junit Test Suite, и это было очень просто сделать в Eclipse. Но так как все мои тесты являются groovy-тестами, нет простого способа создать Test Suite в Spring IDE для тестов spock (написанных на Groovy).

Может кто-нибудь поделиться некоторыми идеями о том, как мы можем создать набор тестов и запустить некоторые конкретные тесты, а также определить порядок тестов.

Любая помощь приветствуется.


person vijay pujar    schedule 25.11.2013    source источник


Ответы (4)


Хотя я думаю, что это не позволит вам указать порядок тестов, вы можете использовать конфигурацию Spock's Runner или встроенные расширения @IgnoreIf/@Require. Посмотрите мой ответ на аналогичный вопрос. . Вероятно, также стоит взглянуть на RunnerConfiguration javadoc, поскольку он показывает, что вы можете включать классы напрямую, а не с помощью аннотаций.

person erdi    schedule 26.11.2013
comment
Спасибо эрди. Но это немного сложное решение. Лучше иметь скрипт драйвера и управлять выполнением теста оттуда (что-то вроде гибридного фреймворка). - person vijay pujar; 27.11.2013

Спецификации Spock также являются действительными тестами (или комплектами) JUnit. Вот почему они распознаются такими инструментами, как STS. Вы должны иметь возможность добавить его в наборы тестов, а также в другие тесты JUnit.

С другой стороны, это не очень хорошая практика, если ваши тесты зависят от порядка выполнения. Если перед выполнением теста необходимо выполнить определенные задачи, их следует поместить в метод setup(). Если эта логика является общей для более чем одного теста, рассмотрите возможность ее извлечения в родительский класс.

person musketyr    schedule 26.11.2013
comment
Как я упоминал выше, я могу запускать тесты как тесты Junit по отдельности или как полный набор. Но мне нужно знать, есть ли способ создать набор тестов, в котором мы можем определить, что запускать (включая порядок тестов). - person vijay pujar; 26.11.2013

Если все, что вам нужно, — это последовательное выполнение методов в спецификации, взгляните на @spock.lang.Stepwise, который удобен для тестирования рабочих процессов. В противном случае у вас есть те же возможности, что и с простым JUnit: вы можете использовать наборы тестов JUnit (4), смоделировать наборы тестов в выбранном вами инструменте сборки (что может не помочь в STS) или определить наборы тестов через конфигурации запуска Eclipse. Я не знаю, насколько далеко зайдет поддержка последнего, но, по крайней мере, он должен позволить вам запускать все тесты в пакете.

person Peter Niederwieser    schedule 26.11.2013

Если тесты, которые вы хотите запустить в определенном порядке, являются частью одной и той же спецификации spock, вы можете использовать аннотацию @Stepwise, чтобы указать, что тесты (методы функций) выполняются в том порядке, в котором они появляются в классе спецификации.

Как уже упоминалось, лучше избегать этой зависимости, если это возможно, из-за сложности, которую она вносит. Например, что произойдет, если первый тест не пройден? Оставляет ли это систему в неопределенном состоянии для последующих тестов? Поэтому было бы лучше предотвратить внутритестовые зависимости с помощью методов setup() и cleanup() (или setupSpec() и cleanupSpec()).

Другой вариант — объединить два зависимых теста в один многоэтапный тест с несколькими последовательными парами блоков when:/then:.

person Alex Blakemore    schedule 26.11.2013
comment
Привет Алекс, Спасибо за ваш ответ. Я доволен вашим вторым вариантом (объединение зависимых тестов в один), однако проблема в том, что они являются функциональными тестами. И если у меня есть один большой тест, то его выполнение займет много времени. Причина в том, что последняя часть скрипта должна дождаться получения заказа, прежде чем продолжить. В этом случае мне пришлось бы ввести неявное ожидание в моем сценарии, чтобы иметь возможность завершить путешествие e2e. - person vijay pujar; 27.11.2013