SlideShare una empresa de Scribd logo
1 de 12
Real life unit testsReal life unit tests
,Эмуляция БД,Эмуляция БД SOASOA .и т д.и т д..
Andrei SolntsevAndrei Solntsev
-Как показывают юнит-Как показывают юнит
тестытесты
 Очки в боулингОчки в боулинг
 КалькуляторКалькулятор
 ТреугольникТреугольник
assertEquals(5,
Triangle.hypotenuse(3, 4));
В реальной жизниВ реальной жизни
Я не программирую боулингЯ не программирую боулинг!!
Моё ПОМоё ПО другоедругое
 -Юнит тесты-Юнит тесты не подходятне подходят для моих проектовдля моих проектов
?В чём проблема?В чём проблема
 Базы данныхБазы данных
 -Веб сервисы-Веб сервисы
 EJBEJB
 ……
Внешние
зависимости
?Какое решение?Какое решение
int: 3, 4
int: 5
Client
code
code
db
jdbc
Юнит-тест
тестирует
только это А это надо
эмулировать
ЭмуляторыЭмуляторы
Требования:
• При скорости ветра 100 км/ч
• Подъёмная сила крыла должна быть 150 кН
Как бы вы стали это тестировать?
• Собрать и запустить ВЕСЬ самолёт
Тестируемый объект
Эмулятор ветра
(mocked wind)
• Протестировать крыло отдельно
• Дорого
• Долго
• Трудно найти причину проблемы
• Не всегда возможно!
ЭмуляторыЭмуляторы
Эмуляторы в кодеЭмуляторы в коде
Class Wing {
WindService wind = new WindServiceImpl();
public void run() {
…
wind.blow();
…
}
}
Wing wing = new Wing();
wing.wind = mock(WindService.class);
when(wind.getSpeed()).thenReturn(100);
wing.run();
assertThat(wing.getLift(), equalTo(150));
Код системы:
Юнит-тест:
В КОД !!!!!
НаблюдашкиНаблюдашки
• Не всегда тесты впереди кода
• В юнит-тестах НЕЛЬЗЯ использовать БД, SOA и т.д.
• Чтобы потестировать, иногда надо порефакторить
• Недостаточно одного вида тестирования
http://mockito.org
http://www.acgavin.com/hamcrest-and-junit4-4
Real-life unit tests

Más contenido relacionado

Destacado

Static website-generators
Static website-generatorsStatic website-generators
Static website-generatorsAndrei Solntsev
 
The fast and the continuous - SQA Days 16
The fast and the continuous - SQA Days 16The fast and the continuous - SQA Days 16
The fast and the continuous - SQA Days 16Andrei Solntsev
 
50 оттенков play!
50 оттенков play!50 оттенков play!
50 оттенков play!Andrei Solntsev
 
The fast and the continuous (SeleniumCamp 2014)
The fast and the continuous (SeleniumCamp 2014)The fast and the continuous (SeleniumCamp 2014)
The fast and the continuous (SeleniumCamp 2014)Andrei Solntsev
 
Functional Programming Dev Club 2009 - final
Functional Programming Dev Club 2009 - finalFunctional Programming Dev Club 2009 - final
Functional Programming Dev Club 2009 - finalAndrei Solntsev
 
Android (Devclub.eu, 30.03.2010)
Android (Devclub.eu, 30.03.2010)Android (Devclub.eu, 30.03.2010)
Android (Devclub.eu, 30.03.2010)Andrei Solntsev
 
Экономически эффективный процесс тестирования (Codefest 2015)
Экономически эффективный процесс тестирования (Codefest 2015)Экономически эффективный процесс тестирования (Codefest 2015)
Экономически эффективный процесс тестирования (Codefest 2015)Andrei Solntsev
 
Good test = simple test (with selenide)
Good test = simple test (with selenide)Good test = simple test (with selenide)
Good test = simple test (with selenide)Andrei Solntsev
 
Liquibase & Flyway @ Baltic DevOps
Liquibase & Flyway @ Baltic DevOpsLiquibase & Flyway @ Baltic DevOps
Liquibase & Flyway @ Baltic DevOpsAndrei Solntsev
 
Bullshit driven development
Bullshit driven developmentBullshit driven development
Bullshit driven developmentAndrei Solntsev
 

Destacado (12)

Static website-generators
Static website-generatorsStatic website-generators
Static website-generators
 
The fast and the continuous - SQA Days 16
The fast and the continuous - SQA Days 16The fast and the continuous - SQA Days 16
The fast and the continuous - SQA Days 16
 
50 оттенков play!
50 оттенков play!50 оттенков play!
50 оттенков play!
 
The fast and the continuous (SeleniumCamp 2014)
The fast and the continuous (SeleniumCamp 2014)The fast and the continuous (SeleniumCamp 2014)
The fast and the continuous (SeleniumCamp 2014)
 
Functional Programming Dev Club 2009 - final
Functional Programming Dev Club 2009 - finalFunctional Programming Dev Club 2009 - final
Functional Programming Dev Club 2009 - final
 
Android (Devclub.eu, 30.03.2010)
Android (Devclub.eu, 30.03.2010)Android (Devclub.eu, 30.03.2010)
Android (Devclub.eu, 30.03.2010)
 
Экономически эффективный процесс тестирования (Codefest 2015)
Экономически эффективный процесс тестирования (Codefest 2015)Экономически эффективный процесс тестирования (Codefest 2015)
Экономически эффективный процесс тестирования (Codefest 2015)
 
Extreme banking
Extreme bankingExtreme banking
Extreme banking
 
Good test = simple test (with selenide)
Good test = simple test (with selenide)Good test = simple test (with selenide)
Good test = simple test (with selenide)
 
Liquibase & Flyway @ Baltic DevOps
Liquibase & Flyway @ Baltic DevOpsLiquibase & Flyway @ Baltic DevOps
Liquibase & Flyway @ Baltic DevOps
 
Bullshit driven development
Bullshit driven developmentBullshit driven development
Bullshit driven development
 
The Dangers of Cucumber
The Dangers of CucumberThe Dangers of Cucumber
The Dangers of Cucumber
 

Similar a Real-life unit tests

Confet&QA Обходные пути в автоматизированном тестировании
Confet&QA Обходные пути в автоматизированном тестированииConfet&QA Обходные пути в автоматизированном тестировании
Confet&QA Обходные пути в автоматизированном тестированииDmytro Zharii
 
The fast and the continuous
The fast and the continuousThe fast and the continuous
The fast and the continuousSQALab
 
Как играть без игрока
Как играть без игрокаКак играть без игрока
Как играть без игрокаSQALab
 
Экономически эффективный процесс тестирования
Экономически эффективный процесс тестированияЭкономически эффективный процесс тестирования
Экономически эффективный процесс тестированияCodeFest
 
QA Fest 2019. Андрей Солнцев. Десять причин моей ненависти
QA Fest 2019. Андрей Солнцев. Десять причин моей ненавистиQA Fest 2019. Андрей Солнцев. Десять причин моей ненависти
QA Fest 2019. Андрей Солнцев. Десять причин моей ненавистиQAFest
 
TMPA-2013 Petrenko Pakulin: Technical Solutions and Non-Technical Challenges ...
TMPA-2013 Petrenko Pakulin: Technical Solutions and Non-Technical Challenges ...TMPA-2013 Petrenko Pakulin: Technical Solutions and Non-Technical Challenges ...
TMPA-2013 Petrenko Pakulin: Technical Solutions and Non-Technical Challenges ...Iosif Itkin
 
Работа с требованиями в Интернет стартапе
Работа с требованиями в Интернет стартапеРабота с требованиями в Интернет стартапе
Работа с требованиями в Интернет стартапеAlexander Baikin
 
Работа с требованиями в Интернет-стартапе / Александр Байкин (UML2.ru)
Работа с требованиями в Интернет-стартапе / Александр Байкин (UML2.ru)Работа с требованиями в Интернет-стартапе / Александр Байкин (UML2.ru)
Работа с требованиями в Интернет-стартапе / Александр Байкин (UML2.ru)Ontico
 
QA Fest 2016. Алексей Виноградов. Цель тестирования. А на самом деле?
QA Fest 2016. Алексей Виноградов. Цель тестирования. А на самом деле?QA Fest 2016. Алексей Виноградов. Цель тестирования. А на самом деле?
QA Fest 2016. Алексей Виноградов. Цель тестирования. А на самом деле?QAFest
 
Статический анализ кода: борьба с удорожанием ошибок
Статический анализ кода: борьба с удорожанием ошибокСтатический анализ кода: борьба с удорожанием ошибок
Статический анализ кода: борьба с удорожанием ошибокAndrey Karpov
 
Ярослав Пернеровский (QA Factory/GlobalLogic):"Рукописи не горят, но и не тон...
Ярослав Пернеровский (QA Factory/GlobalLogic):"Рукописи не горят, но и не тон...Ярослав Пернеровский (QA Factory/GlobalLogic):"Рукописи не горят, но и не тон...
Ярослав Пернеровский (QA Factory/GlobalLogic):"Рукописи не горят, но и не тон...GTestClub
 
Математика для тестировщиков
Математика для тестировщиковМатематика для тестировщиков
Математика для тестировщиковSQALab
 
Особенности тестирования открытого ПО
Особенности тестирования открытого ПООсобенности тестирования открытого ПО
Особенности тестирования открытого ПОAlexey Lyanguzov
 
Continuous integration with TeamCity
Continuous integration with TeamCityContinuous integration with TeamCity
Continuous integration with TeamCityAndrei Ivanov
 
Jbreak 2016: Твой личный Spring Boot Starter
Jbreak 2016: Твой личный Spring Boot StarterJbreak 2016: Твой личный Spring Boot Starter
Jbreak 2016: Твой личный Spring Boot StarterAleksandr Tarasov
 
Роман Петров - юнит-тестирование мобильных приложений на примере платформы iOS
Роман Петров - юнит-тестирование мобильных приложений на примере платформы iOSРоман Петров - юнит-тестирование мобильных приложений на примере платформы iOS
Роман Петров - юнит-тестирование мобильных приложений на примере платформы iOSProvectus
 
Специфика тестирования проектов с открытым исходным кодом
Специфика тестирования проектов с открытым исходным кодомСпецифика тестирования проектов с открытым исходным кодом
Специфика тестирования проектов с открытым исходным кодомSQALab
 
Сергей Скроботов "Баннерокрутилка: разбираем на куски"
Сергей Скроботов "Баннерокрутилка: разбираем на куски"Сергей Скроботов "Баннерокрутилка: разбираем на куски"
Сергей Скроботов "Баннерокрутилка: разбираем на куски"Yandex
 

Similar a Real-life unit tests (20)

Confet&QA Обходные пути в автоматизированном тестировании
Confet&QA Обходные пути в автоматизированном тестированииConfet&QA Обходные пути в автоматизированном тестировании
Confet&QA Обходные пути в автоматизированном тестировании
 
The fast and the continuous
The fast and the continuousThe fast and the continuous
The fast and the continuous
 
Как играть без игрока
Как играть без игрокаКак играть без игрока
Как играть без игрока
 
Экономически эффективный процесс тестирования
Экономически эффективный процесс тестированияЭкономически эффективный процесс тестирования
Экономически эффективный процесс тестирования
 
QA Fest 2019. Андрей Солнцев. Десять причин моей ненависти
QA Fest 2019. Андрей Солнцев. Десять причин моей ненавистиQA Fest 2019. Андрей Солнцев. Десять причин моей ненависти
QA Fest 2019. Андрей Солнцев. Десять причин моей ненависти
 
TMPA-2013 Petrenko Pakulin: Technical Solutions and Non-Technical Challenges ...
TMPA-2013 Petrenko Pakulin: Technical Solutions and Non-Technical Challenges ...TMPA-2013 Petrenko Pakulin: Technical Solutions and Non-Technical Challenges ...
TMPA-2013 Petrenko Pakulin: Technical Solutions and Non-Technical Challenges ...
 
What Tests Are For?
What Tests Are For?What Tests Are For?
What Tests Are For?
 
Работа с требованиями в Интернет стартапе
Работа с требованиями в Интернет стартапеРабота с требованиями в Интернет стартапе
Работа с требованиями в Интернет стартапе
 
Работа с требованиями в Интернет-стартапе / Александр Байкин (UML2.ru)
Работа с требованиями в Интернет-стартапе / Александр Байкин (UML2.ru)Работа с требованиями в Интернет-стартапе / Александр Байкин (UML2.ru)
Работа с требованиями в Интернет-стартапе / Александр Байкин (UML2.ru)
 
Gaperton - Software People 2012
Gaperton - Software People 2012Gaperton - Software People 2012
Gaperton - Software People 2012
 
QA Fest 2016. Алексей Виноградов. Цель тестирования. А на самом деле?
QA Fest 2016. Алексей Виноградов. Цель тестирования. А на самом деле?QA Fest 2016. Алексей Виноградов. Цель тестирования. А на самом деле?
QA Fest 2016. Алексей Виноградов. Цель тестирования. А на самом деле?
 
Статический анализ кода: борьба с удорожанием ошибок
Статический анализ кода: борьба с удорожанием ошибокСтатический анализ кода: борьба с удорожанием ошибок
Статический анализ кода: борьба с удорожанием ошибок
 
Ярослав Пернеровский (QA Factory/GlobalLogic):"Рукописи не горят, но и не тон...
Ярослав Пернеровский (QA Factory/GlobalLogic):"Рукописи не горят, но и не тон...Ярослав Пернеровский (QA Factory/GlobalLogic):"Рукописи не горят, но и не тон...
Ярослав Пернеровский (QA Factory/GlobalLogic):"Рукописи не горят, но и не тон...
 
Математика для тестировщиков
Математика для тестировщиковМатематика для тестировщиков
Математика для тестировщиков
 
Особенности тестирования открытого ПО
Особенности тестирования открытого ПООсобенности тестирования открытого ПО
Особенности тестирования открытого ПО
 
Continuous integration with TeamCity
Continuous integration with TeamCityContinuous integration with TeamCity
Continuous integration with TeamCity
 
Jbreak 2016: Твой личный Spring Boot Starter
Jbreak 2016: Твой личный Spring Boot StarterJbreak 2016: Твой личный Spring Boot Starter
Jbreak 2016: Твой личный Spring Boot Starter
 
Роман Петров - юнит-тестирование мобильных приложений на примере платформы iOS
Роман Петров - юнит-тестирование мобильных приложений на примере платформы iOSРоман Петров - юнит-тестирование мобильных приложений на примере платформы iOS
Роман Петров - юнит-тестирование мобильных приложений на примере платформы iOS
 
Специфика тестирования проектов с открытым исходным кодом
Специфика тестирования проектов с открытым исходным кодомСпецифика тестирования проектов с открытым исходным кодом
Специфика тестирования проектов с открытым исходным кодом
 
Сергей Скроботов "Баннерокрутилка: разбираем на куски"
Сергей Скроботов "Баннерокрутилка: разбираем на куски"Сергей Скроботов "Баннерокрутилка: разбираем на куски"
Сергей Скроботов "Баннерокрутилка: разбираем на куски"
 

Más de Andrei Solntsev

Тройничок: Selenide для Web, Android и iOS
Тройничок: Selenide для Web, Android и iOSТройничок: Selenide для Web, Android и iOS
Тройничок: Selenide для Web, Android и iOSAndrei Solntsev
 
Flaky tests. Метод.
Flaky tests. Метод. Flaky tests. Метод.
Flaky tests. Метод. Andrei Solntsev
 
Батл: Тесты или не тесты?
Батл: Тесты или не тесты?Батл: Тесты или не тесты?
Батл: Тесты или не тесты?Andrei Solntsev
 
Как получить чёрный пояс по программированию
Как получить чёрный пояс по программированиюКак получить чёрный пояс по программированию
Как получить чёрный пояс по программированиюAndrei Solntsev
 
Selenide puzzlers @ devclub.eu
Selenide puzzlers @ devclub.euSelenide puzzlers @ devclub.eu
Selenide puzzlers @ devclub.euAndrei Solntsev
 
Liquibase: Enterprise Edition
Liquibase: Enterprise EditionLiquibase: Enterprise Edition
Liquibase: Enterprise EditionAndrei Solntsev
 
Evolutionary Database Design
Evolutionary Database DesignEvolutionary Database Design
Evolutionary Database DesignAndrei Solntsev
 
Functional Programming In Java
Functional Programming In JavaFunctional Programming In Java
Functional Programming In JavaAndrei Solntsev
 

Más de Andrei Solntsev (9)

Тройничок: Selenide для Web, Android и iOS
Тройничок: Selenide для Web, Android и iOSТройничок: Selenide для Web, Android и iOS
Тройничок: Selenide для Web, Android и iOS
 
Flaky tests. Метод.
Flaky tests. Метод. Flaky tests. Метод.
Flaky tests. Метод.
 
Батл: Тесты или не тесты?
Батл: Тесты или не тесты?Батл: Тесты или не тесты?
Батл: Тесты или не тесты?
 
Как получить чёрный пояс по программированию
Как получить чёрный пояс по программированиюКак получить чёрный пояс по программированию
Как получить чёрный пояс по программированию
 
Selenide puzzlers @ devclub.eu
Selenide puzzlers @ devclub.euSelenide puzzlers @ devclub.eu
Selenide puzzlers @ devclub.eu
 
Liquibase: Enterprise Edition
Liquibase: Enterprise EditionLiquibase: Enterprise Edition
Liquibase: Enterprise Edition
 
Kiss.devclub ee.est
Kiss.devclub ee.estKiss.devclub ee.est
Kiss.devclub ee.est
 
Evolutionary Database Design
Evolutionary Database DesignEvolutionary Database Design
Evolutionary Database Design
 
Functional Programming In Java
Functional Programming In JavaFunctional Programming In Java
Functional Programming In Java
 

Real-life unit tests

  • 1. Real life unit testsReal life unit tests ,Эмуляция БД,Эмуляция БД SOASOA .и т д.и т д.. Andrei SolntsevAndrei Solntsev
  • 2. -Как показывают юнит-Как показывают юнит тестытесты  Очки в боулингОчки в боулинг  КалькуляторКалькулятор  ТреугольникТреугольник assertEquals(5, Triangle.hypotenuse(3, 4));
  • 3. В реальной жизниВ реальной жизни Я не программирую боулингЯ не программирую боулинг!! Моё ПОМоё ПО другоедругое  -Юнит тесты-Юнит тесты не подходятне подходят для моих проектовдля моих проектов
  • 4. ?В чём проблема?В чём проблема  Базы данныхБазы данных  -Веб сервисы-Веб сервисы  EJBEJB  …… Внешние зависимости
  • 5. ?Какое решение?Какое решение int: 3, 4 int: 5 Client code code db jdbc Юнит-тест тестирует только это А это надо эмулировать
  • 6. ЭмуляторыЭмуляторы Требования: • При скорости ветра 100 км/ч • Подъёмная сила крыла должна быть 150 кН Как бы вы стали это тестировать?
  • 7. • Собрать и запустить ВЕСЬ самолёт Тестируемый объект Эмулятор ветра (mocked wind) • Протестировать крыло отдельно • Дорого • Долго • Трудно найти причину проблемы • Не всегда возможно! ЭмуляторыЭмуляторы
  • 8. Эмуляторы в кодеЭмуляторы в коде Class Wing { WindService wind = new WindServiceImpl(); public void run() { … wind.blow(); … } } Wing wing = new Wing(); wing.wind = mock(WindService.class); when(wind.getSpeed()).thenReturn(100); wing.run(); assertThat(wing.getLift(), equalTo(150)); Код системы: Юнит-тест:
  • 10. НаблюдашкиНаблюдашки • Не всегда тесты впереди кода • В юнит-тестах НЕЛЬЗЯ использовать БД, SOA и т.д. • Чтобы потестировать, иногда надо порефакторить • Недостаточно одного вида тестирования