Особенности тестирования Spring Boot приложения. Нововведения с версии spring-boot 1.4.+
В программе:
* Старые подходы
** @ContextConfiguration
** @ContextHierarchy && @DirtiesContext
** @ActiveProfiles
* Что нового нам приготовил Spring Boot?
** @SpringBootTest
** @TestConfiguration
** @SpringBootConfiguration и его связь с @SpringBootApplicatoin
** @MockBean && @SpyBean && @*Beans
** @DataJpaTest
** @WebMvcTest
* Кэширование spring контекстов
* Шкала тестов
* Порядок сканирвоания контекста test+main. Подводные камни этого процесса
Слайды с доклада "Проклятие Spring Boot Test" на JUG в рамках РИФ Воронеж
Обсудим что нового в Spring Boot Test 1.4.0+
В программе:
* Старые подходы
** @ContextConfiguration
** @ContextHierarchy && @DirtiesContext
** @ActiveProfiles
* Что нового нам приготовил Spring Boot?
** @SpringBootTest
** @TestConfiguration
** @MockBean && @SpyBean && @*Beans
** @DataJpaTest
** @WebMvcTest
* Кэширование spring контекстов
* Шкала тестов
Слайды с доклада "Проклятие Spring Boot Test"
Presentation from https://heisenbug-piter.ru/en/talks/2018/spb/kkw6oivsoywayacggksmk/
Once upon a time, we got a requirement to finish all testing in 2 days despite the number of tests to run. That number grew, and grew, and grew, and now there are tens of millions of them. So this is a story about building a dam against the never-ending flood which turned out to be not that scary. You are very welcome to join and see it for yourself.
QA Fest 2017. Яна Кокряшкина. Интеграция автоматизированных тестов с инструме...QAFest
Как автоматически поставить тест кейсу статус "Pass", создать новый или зактрыть проверенный баг? Во время презентации расскажу как интегрировать автоматизированные тесты с инструментами для тестирования. Покажу рельные примеры совместной работы автоматизированных тестов для веб сайта, написаных на Java или Python, с YouTrack, TestRail и EasyQA.
Особенности тестирования Spring Boot приложения. Нововведения с версии spring-boot 1.4.+
В программе:
* Старые подходы
** @ContextConfiguration
** @ContextHierarchy && @DirtiesContext
** @ActiveProfiles
* Что нового нам приготовил Spring Boot?
** @SpringBootTest
** @TestConfiguration
** @SpringBootConfiguration и его связь с @SpringBootApplicatoin
** @MockBean && @SpyBean && @*Beans
** @DataJpaTest
** @WebMvcTest
* Кэширование spring контекстов
* Шкала тестов
* Порядок сканирвоания контекста test+main. Подводные камни этого процесса
Слайды с доклада "Проклятие Spring Boot Test"
Особенности тестирования Spring Boot приложения. Нововведения с версии spring-boot 1.4.+
В программе:
* Старые подходы
** @ContextConfiguration
** @ContextHierarchy && @DirtiesContext
** @ActiveProfiles
* Что нового нам приготовил Spring Boot?
** @SpringBootTest
** @TestConfiguration
** @SpringBootConfiguration и его связь с @SpringBootApplicatoin
** @MockBean && @SpyBean && @*Beans
** @DataJpaTest
** @WebMvcTest
* Кэширование spring контекстов
* Шкала тестов
* Порядок сканирвоания контекста test+main. Подводные камни этого процесса
Слайды с доклада "Проклятие Spring Boot Test" на JUG в рамках РИФ Воронеж
Обсудим что нового в Spring Boot Test 1.4.0+
В программе:
* Старые подходы
** @ContextConfiguration
** @ContextHierarchy && @DirtiesContext
** @ActiveProfiles
* Что нового нам приготовил Spring Boot?
** @SpringBootTest
** @TestConfiguration
** @MockBean && @SpyBean && @*Beans
** @DataJpaTest
** @WebMvcTest
* Кэширование spring контекстов
* Шкала тестов
Слайды с доклада "Проклятие Spring Boot Test"
Presentation from https://heisenbug-piter.ru/en/talks/2018/spb/kkw6oivsoywayacggksmk/
Once upon a time, we got a requirement to finish all testing in 2 days despite the number of tests to run. That number grew, and grew, and grew, and now there are tens of millions of them. So this is a story about building a dam against the never-ending flood which turned out to be not that scary. You are very welcome to join and see it for yourself.
QA Fest 2017. Яна Кокряшкина. Интеграция автоматизированных тестов с инструме...QAFest
Как автоматически поставить тест кейсу статус "Pass", создать новый или зактрыть проверенный баг? Во время презентации расскажу как интегрировать автоматизированные тесты с инструментами для тестирования. Покажу рельные примеры совместной работы автоматизированных тестов для веб сайта, написаных на Java или Python, с YouTrack, TestRail и EasyQA.
Особенности тестирования Spring Boot приложения. Нововведения с версии spring-boot 1.4.+
В программе:
* Старые подходы
** @ContextConfiguration
** @ContextHierarchy && @DirtiesContext
** @ActiveProfiles
* Что нового нам приготовил Spring Boot?
** @SpringBootTest
** @TestConfiguration
** @SpringBootConfiguration и его связь с @SpringBootApplicatoin
** @MockBean && @SpyBean && @*Beans
** @DataJpaTest
** @WebMvcTest
* Кэширование spring контекстов
* Шкала тестов
* Порядок сканирвоания контекста test+main. Подводные камни этого процесса
Слайды с доклада "Проклятие Spring Boot Test"
QA Fest 2019. Андрей Солнцев. Десять причин моей ненавистиQAFest
Меня часто спрашивают, за что я не люблю в тестах Page Objects, TestNG, ReportPortal, try/catch, циклы и условия, неявные ожидания, явные ожидания, Dependency injection, Spring и т.д.
Расскажу коротко и быстро. На каждую тему 5 минут.
Олег Миколайченко "Как перестать хранить секреты в git и начать использовать ...Fwdays
Покажу как выпилить пароли/сертификаты/важные данные из репозиториев. Дам всю необходимую информацию для внедрению Hashicorp Vault в вашей компании и команде. Сделаю акцент на использовании в контейнерных инфраструктурах. Рассмотрю продвинутые практики использования и юз-кейсы с вау эффектом, которые работают в реальной жизни. Тут будут звучать такие слова как Ansible, Chef, Puppet, Docker, Swarm, Kubernetes etc.
Доклад, который сможет помочь сделать все хорошо, даже если сейчас все плохо.
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...Ontico
Современные процессоры имеют на борту по нескольку вычислительных ядер, позволяющих запускать задачи на них параллельно. И, казалось бы, вот оно — счастье: бей большие задачи на куски, запускай эти куски параллельно на разных ядрах и радуйся.
Но не все так просто. Для того чтобы одновременный доступ к общим данным выполнялся корректно, современные системы используют разные примитивы синхронизации. В основе одних лежат блокировки (locks), в основе других — операции типа сравнение-с-обменом (compare-and-swap). Однако и у тех и у других есть свои слабые места. О них мы и поговорим.
Из доклада вы узнаете, чем блокирующие алгоритмы отличаются от неблокирующих, и какими достоинствами и недостатками обладает каждый из этих классов. Кроме того, будут показаны различные подводные камни тех и других решений: Deadlock, Livelock, Starvation, Mutable vs Immutable hype.
Как перестать хранить секреты в git и начать использовать Hashicorp VaultOleg Mykolaichenko
Покажу как выпилить пароли/сертификаты/важные данные из репозиториев. Дам всю необходимую информацию для внедрения Hashicorp Vault в вашей компании и команде. Сделаю акцент на использовании в контейнерных инфраструктурах. Рассмотрю продвинутые практики использования и юз-кейсы с вау эффектом, которые работают в реальной жизни. Тут будут звучать такие слова как Ansible, Chef, Puppet, Docker, Swarm, Kubernetes etc.
Доклад, который сможет помочь сделать все хорошо, даже если сейчас все плохо.
21 октября состоялась 1 встреча одесского сообщества Python-разработчиков - Python Meetup.
Поговорили о новых технологиях, диалектах и инструментарии для создания графических интерфейсов.
Докладчики:
Александр Степанов (Python Team Lead at SteelKiwi Inc.)
Тема: Шаблон проекта. Использование Vagrant, VirtualEnv и Ansible provisioner. Зачем это необходимо?
Евгений Гетманский (Рython team lead at SteelKiwi Inc.)
Тема: Оптимизация работы веб сервера с базой данных на примере Django.
Taming Functional Web Testing with Spock and GebC4Media
Video and slides synchronized, mp3 and slide download available at URL http://bit.ly/14tIOTm.
Peter Niederwieser demonstrates how to do functional web testing with Spock and Geb, two testing tools from the Groovy/Java world.Filmed at qconlondon.com.
Peter Niederwieser is a computer language enthusiast from Linz, Austria. Having used Java since 1997, Peter nowadays prefers to work with more flexible languages - in particular Groovy, Scala, and Clojure. Peter is the creator of Spock and a Groovy committer. Twitter: @pniederw
Geb is a browser automation solution.
Geb uses the power of Selenium WebDriver and more.
Geb + Spock API simplifies test automation using Given-When-Then Concept.
Yaroslav Pernerovskyy. REST API testing example on Groovy and Spock. Created for Selenium Camp 2017.
Code here: https://github.com/ysparrow/groovy-test-for-rest
Spock Extensions allow to integrate Spock Specifications with other thid-party libraries, like Spring, Guice, Grails or Tapestry. They allow to control tests execution, their order and modify test results according to your custom criteria.
This presentation provides all the details required for implementing your very own Spock extensions. Global extensions, annotation-driven extensions, Spock interceptors and listeners are covered.
Тестируй это / Виктор Русакович (GP Solutions)Ontico
РИТ++ 2017, Frontend Сonf
Зал Дели + Калькутта, 5 июня, 18:00
Тезисы:
http://frontendconf.ru/2017/abstracts/2625.html
Как писать тесты?
Как запускать тесты?
Кто все сломал?
Все три вопроса рассмотрены в докладе. Также будет демо интеграции проекта, покрытого тестами, и cloud-based-сервиса по запуску этих тестов (github+travis).
Кроме того, расскажу об опыте по сокращению времени прогона тестов; о том, как добавить тесты в случае, если у вас уже есть большое приложение, но все еще без тестов.
QA Fest 2019. Андрей Солнцев. Десять причин моей ненавистиQAFest
Меня часто спрашивают, за что я не люблю в тестах Page Objects, TestNG, ReportPortal, try/catch, циклы и условия, неявные ожидания, явные ожидания, Dependency injection, Spring и т.д.
Расскажу коротко и быстро. На каждую тему 5 минут.
Олег Миколайченко "Как перестать хранить секреты в git и начать использовать ...Fwdays
Покажу как выпилить пароли/сертификаты/важные данные из репозиториев. Дам всю необходимую информацию для внедрению Hashicorp Vault в вашей компании и команде. Сделаю акцент на использовании в контейнерных инфраструктурах. Рассмотрю продвинутые практики использования и юз-кейсы с вау эффектом, которые работают в реальной жизни. Тут будут звучать такие слова как Ansible, Chef, Puppet, Docker, Swarm, Kubernetes etc.
Доклад, который сможет помочь сделать все хорошо, даже если сейчас все плохо.
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...Ontico
Современные процессоры имеют на борту по нескольку вычислительных ядер, позволяющих запускать задачи на них параллельно. И, казалось бы, вот оно — счастье: бей большие задачи на куски, запускай эти куски параллельно на разных ядрах и радуйся.
Но не все так просто. Для того чтобы одновременный доступ к общим данным выполнялся корректно, современные системы используют разные примитивы синхронизации. В основе одних лежат блокировки (locks), в основе других — операции типа сравнение-с-обменом (compare-and-swap). Однако и у тех и у других есть свои слабые места. О них мы и поговорим.
Из доклада вы узнаете, чем блокирующие алгоритмы отличаются от неблокирующих, и какими достоинствами и недостатками обладает каждый из этих классов. Кроме того, будут показаны различные подводные камни тех и других решений: Deadlock, Livelock, Starvation, Mutable vs Immutable hype.
Как перестать хранить секреты в git и начать использовать Hashicorp VaultOleg Mykolaichenko
Покажу как выпилить пароли/сертификаты/важные данные из репозиториев. Дам всю необходимую информацию для внедрения Hashicorp Vault в вашей компании и команде. Сделаю акцент на использовании в контейнерных инфраструктурах. Рассмотрю продвинутые практики использования и юз-кейсы с вау эффектом, которые работают в реальной жизни. Тут будут звучать такие слова как Ansible, Chef, Puppet, Docker, Swarm, Kubernetes etc.
Доклад, который сможет помочь сделать все хорошо, даже если сейчас все плохо.
21 октября состоялась 1 встреча одесского сообщества Python-разработчиков - Python Meetup.
Поговорили о новых технологиях, диалектах и инструментарии для создания графических интерфейсов.
Докладчики:
Александр Степанов (Python Team Lead at SteelKiwi Inc.)
Тема: Шаблон проекта. Использование Vagrant, VirtualEnv и Ansible provisioner. Зачем это необходимо?
Евгений Гетманский (Рython team lead at SteelKiwi Inc.)
Тема: Оптимизация работы веб сервера с базой данных на примере Django.
Taming Functional Web Testing with Spock and GebC4Media
Video and slides synchronized, mp3 and slide download available at URL http://bit.ly/14tIOTm.
Peter Niederwieser demonstrates how to do functional web testing with Spock and Geb, two testing tools from the Groovy/Java world.Filmed at qconlondon.com.
Peter Niederwieser is a computer language enthusiast from Linz, Austria. Having used Java since 1997, Peter nowadays prefers to work with more flexible languages - in particular Groovy, Scala, and Clojure. Peter is the creator of Spock and a Groovy committer. Twitter: @pniederw
Geb is a browser automation solution.
Geb uses the power of Selenium WebDriver and more.
Geb + Spock API simplifies test automation using Given-When-Then Concept.
Yaroslav Pernerovskyy. REST API testing example on Groovy and Spock. Created for Selenium Camp 2017.
Code here: https://github.com/ysparrow/groovy-test-for-rest
Spock Extensions allow to integrate Spock Specifications with other thid-party libraries, like Spring, Guice, Grails or Tapestry. They allow to control tests execution, their order and modify test results according to your custom criteria.
This presentation provides all the details required for implementing your very own Spock extensions. Global extensions, annotation-driven extensions, Spock interceptors and listeners are covered.
Тестируй это / Виктор Русакович (GP Solutions)Ontico
РИТ++ 2017, Frontend Сonf
Зал Дели + Калькутта, 5 июня, 18:00
Тезисы:
http://frontendconf.ru/2017/abstracts/2625.html
Как писать тесты?
Как запускать тесты?
Кто все сломал?
Все три вопроса рассмотрены в докладе. Также будет демо интеграции проекта, покрытого тестами, и cloud-based-сервиса по запуску этих тестов (github+travis).
Кроме того, расскажу об опыте по сокращению времени прогона тестов; о том, как добавить тесты в случае, если у вас уже есть большое приложение, но все еще без тестов.
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)Ontico
JavaScript, который мы пишем, не всегда исполняется, как мы думаем. Виртуальные машины, исполняющие его, делают многое, чтобы он работал быстрее. Но они не всесильны, и чтобы сделать код действительно быстрым, нужно знать их особенности и как все работает под капотом.
Поговорим об этих особенностях, что может служить причиной потери производительности, как это диагностировать и как делать код действительно быстрым. Доклад базируется на опыте, полученном в ходе работы над такими проектами как basis.js (весьма быстрый фреймворк для SPA), CSSO (минификатор CSS, который из медленного стал один из самых быстрых), CSSTree (самый быстрый детальный CSS парсер) и других.
JavaScript, который мы пишем, не всегда исполняется, как мы думаем. Виртуальные машины, исполняющие его, делают многое, чтобы он работал быстрее. Но они не всесильны, и чтобы сделать код действительно быстрым, нужно знать их особенности и как все работает под капотом.
Поговорим об этих особенностях, что может служить причиной потери производительности, как это диагностировать и как делать код действительно быстрым. Доклад базируется на опыте, полученном в ходе работы над такими проектами как basis.js (весьма быстрый фреймворк для SPA), CSSO (минификатор CSS, который из медленного стал один из самых быстрых), CSSTree (самый быстрый детальный CSS парсер) и других.
Presentation from 11th SQADays conference in Kiev (April 2012) and Selenium Camp 2013 (February 2013) about how to measure what functional tests are really testing from requirements, code and UI perspective.
Михаил Рахманов рассказывает о паттерне Promise и его использовании в iOS разработке.
Краткие тезисы:
- Что такое promises?
- Использование promises в iOS разработке (существующие библиотеки и подходы)
- Реализация promises библиотекой PromiseKit (основные методы, цепочки promises, обработка ошибок)
- Какие задачи можно решить с помощью promises, а какие - нельзя
- Использование promises на примере приложения: драм-машины с возможностью сохранять аудио-дорожки
- Подведение итогов: преимущества и недостатки.
RDSDataSource - внутренние пятничные митапы iOS-команды RAMBLER&Co.
The fast and the continuous
* Вы всё ещё гоняете все свои тесты на Selenium?
* Вы всё ещё считаете, что TestNG круче, чем JUnit?
* Вы всё ещё пытаетесь распараллелить свои тесты?
* Вы всё ещё мечтаете иметь собственный Selenium Grid с * 30 машинами и прогонять тесты всего лишь за пару часов?
Тогда мы идём к вам!
Я поделюсь нашим опытом автоматизации тестирования, расскажу, как нам удаётся командой из нескольких человек писать и код, и тесты, и прогонять полный цикл автотестов всего лишь за 5 минут без гридов и прочих монстров.
Тестирование - это не должно быть сложно!
Тестирование — это способ узнать о разнообразных проблемах, которые могут возникнуть во время разработки вашего проекта. В лекции рассмотрены различные виды тестирования и различные практики, которые позволят вам узнавать о проблемах заранее.
Ты узнаешь 10 конкретных шагов, которые помогут тебе стать качественным тестировщиком. А еще получишь ответы на вопросы:
- Must-have skills Junior`а
- Что учить самостоятельно?
- Нужны ли курсы?
- Что поможет получить работу?
- Как может развиваться карьера?
17. Main thoughts
● Проверяем соответствие требованиям
● Делаем быстро и точечно
● Находим проблемы на раннем этапе
18. Main thoughts
● Проверяем соответствие требованиям
● Делаем быстро и точечно
● Находим проблемы на раннем этапе
● Проверяем, что ничего не сломали при изменении
19. Main thoughts
● Проверяем соответствие требованиям
● Делаем быстро и точечно
● Находим проблемы на раннем этапе
● Проверяем, что ничего не сломали при изменении
● Строим дизайн системы
20. Main thoughts
● Проверяем соответствие требованиям
● Делаем быстро и точечно
● Находим проблемы на раннем этапе
● Проверяем, что ничего не сломали при изменении
● Строим дизайн системы
● Документируем поведение системы
22. Typical Java Unit test
public class JUnitClassicStateResolverSpec {
@Test
public void classicStatesShouldUseGameRules() {
StateResolver scissorsResolver = new ScissorsStateResolver();
StateResolver rockResolver = new RockStateResolver();
StateResolver paperResolver = new PaperStateResolver();
assertEquals(false, scissorsResolver.tryToBeat(State.SPOCK));
assertEquals(true, scissorsResolver.tryToBeat(State.LIZARD));
assertEquals(true, scissorsResolver.tryToBeat(State.OUT));
assertEquals(true, scissorsResolver.tryToBeat(State.PAPER));
assertEquals(false, scissorsResolver.tryToBeat(State.ROCK));
assertEquals(false,
scissorsResolver.tryToBeat(State.SCISSORS));
assertEquals(false, rockResolver.tryToBeat(State.SPOCK));
assertEquals(false, rockResolver.tryToBeat(State.LIZARD));
assertEquals(true, rockResolver.tryToBeat(State.OUT));
assertEquals(false, rockResolver.tryToBeat(State.PAPER));
assertEquals(false, rockResolver.tryToBeat(State.ROCK));
assertEquals(true, rockResolver.tryToBeat(State.SCISSORS));
assertEquals(true, paperResolver.tryToBeat(State.SPOCK));
assertEquals(false, paperResolver.tryToBeat(State.LIZARD));
assertEquals(true, paperResolver.tryToBeat(State.OUT));
assertEquals(false, paperResolver.tryToBeat(State.PAPER));
assertEquals(true, paperResolver.tryToBeat(State.ROCK));
assertEquals(false, paperResolver.tryToBeat(State.SCISSORS));
}
}
23. Typical Java Unit test
classicStatesShouldUseGameRules(net.astanajug.meetup.spock.JUnitClassicStateResolverSpec) Time elapsed: 0.003 sec <<< FAILURE!
java.lang.AssertionError: expected:<false> but was:<true>
at org.junit.Assert.fail(Assert.java:88)
at org.junit.Assert.failNotEquals(Assert.java:834)
at org.junit.Assert.assertEquals(Assert.java:118)
at org.junit.Assert.assertEquals(Assert.java:144)
at
net.astanajug.meetup.spock.JUnitClassicStateResolverSpec.classicStatesShouldUseGameRules(JUnitClassicStateResolverSpec.java:27
)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+100500 stack trace lines
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:350)
at org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:1021)
+100500 stack trace lines
28. What is?
● Начат в 2008 году
● Создан Peter Niederweiser и поддерживается Luke Daley и
сообществом
29. What is?
● Начат в 2008 году
● Создан Peter Niederweiser и поддерживается Luke Daley и
сообществом
● Разработан с использованием Groovy
30. What is?
● Начат в 2008 году
● Создан Peter Niederweiser и поддерживается Luke Daley и
сообществом
● Разработан с использованием Groovy
● Базируется на идеях JUnit, jMock, Mockito, RSpec, JUnitParameters и
Start Trek
31. What is?
● Начат в 2008 году
● Создан Peter Niederweiser и поддерживается Luke Daley и
сообществом
● Разработан с использованием Groovy
● Базируется на идеях JUnit, jMock, Mockito, RSpec, JUnitParameters и
Start Trek
● Первый “мажорный” релиз выпущен в 2015 году
34. Why?
● Совместим с JUnit
● Легко попробовать - http://webconsole.spockframework.org
35. Why?
● Совместим с JUnit
● Легко попробовать - http://webconsole.spockframework.org
● “Выразительная” конструкция построения теста - Given-When-Then
36. Given-When-Then example
def "A basket with one product has equal weight"() {
given: "an empty basket and a TV"
Product tv = new Product(name:"bravia",price:1200,weight:18)
Basket basket = new Basket()
when: "user wants to buy the TV"
basket.addProduct(tv)
then: "basket weight is equal to the TV"
basket.currentWeight == tv.weight
}
37. Why?
● Совместим с JUnit
● Легко попробовать - http://webconsole.spockframework.org
● “Выразительная” конструкция построения теста - Given-When-Then
● Понятные сообщения об ошибках
39. Why?
● Совместим с JUnit
● Легко попробовать - http://webconsole.spockframework.org
● “Выразительная” конструкция построения теста - Given-When-Then
● Понятные сообщения об ошибках
● Возможность тестирования взаимодействий через моки
40. Interaction testing example
def "credit card connection is always closed down"() {
given: "a basket, a customer and a TV"
Product tv = new Product(name:"bravia",price:1200,weight:18)
BillableBasket basket = new BillableBasket()
Customer customer = new Customer(...)
and: "a credit card service"
CreditCardProcessor creditCardSevice = Mock(CreditCardProcessor)
basket.setCreditCardProcessor(creditCardSevice)
when: "user checks out the tv"
basket.addProduct tv
basket.checkout(customer)
then: "connection is always closed at the end"
1 * creditCardSevice.shutdown()
}
41. Why?
● Совместим с JUnit
● Легко попробовать - http://webconsole.spockframework.org
● “Выразительная” конструкция построения теста - Given-When-Then
● Понятные сообщения об ошибках
● Возможность тестирования взаимодействий через моки
● Простота тестирования с использованием наборов данных
42. Data Driven example
class HelloSpock extends spock.lang.Specification {
def "length of Spock's and his friends' names"() {
expect:
name.size() == length
where:
name | length
"Spock" | 5
"Kirk" | 4
"Scotty" | 6
}
}