SlideShare une entreprise Scribd logo
1  sur  20
Unit-тесты: Java
Ляховец Вадим
САНКТ-ПЕТЕРБУРГ, 2016
Содержание
UNIT и INTEGRATION тесты
Приемущества модульного тестирования (UNIT
тестов)
JUnit — библиотека для модульного тестирования
Mock-библиотеки
2
UNIT и INTEGRATION тесты
3
Unit test: процесс в программировании, позволяющий проверить на
корректность отдельные модули исходного кода программы.Идея
состоит в том, чтобы писать тесты для каждого нетривиального
метода.
Integration test: одна из фаз тестирования программного
обеспечения, при котором отдельные программные модули
объединяются и тестируются в группе.
Преимущества UNIT тестов
Поощрение изменений
Модульное тестирование позже позволяет программистам проводить рефакторинг, будучи
уверенными, что модуль по-прежнему работает корректно .
Упрощение интеграции
Модульное тестирование помогает устранить сомнения по поводу отдельных модулей и
может быть использовано для подхода к тестированию «снизу вверх»: сначала тестируются
отдельные части программы, затем программа в целом.
Документирование кода
Модульные тесты можно рассматривать как «живой документ» для тестируемого класса.
Клиенты, которые не знают, как использовать данный класс, могут использовать юнит-тест в
качестве примера.
Отделение интерфейса от реализации
Поскольку некоторые классы могут использовать другие классы, тестирование отдельного
класса часто распространяется на связанные с ним. Например, класс пользуется базой
данных; в ходе написания теста программист обнаруживает, что тесту приходится
взаимодействовать с базой. Это ошибка, поскольку тест не должен выходить за границу
класса. В результате разработчик абстрагируется от соединения с базой данных и реализует
этот интерфейс, используя свой собственный mock-объект. Это приводит к менее связанному
коду, минимизируя зависимости в системе.
4
Ограничения UNIT тестов
Ошибки интеграции системного уровня
Происходит тестирование каждого из модулей по отдельности. Это
означает, что ошибки интеграции, системного уровня, функций,
исполняемых в нескольких модулях не будут определены.
Производительность
Данная технология бесполезна для проведения тестов на
производительность.
Таким образом, модульное тестирование более эффективно при
использовании в сочетании с другими методиками тестирования.
5
JUnit
6
JUnit - библиотека для модульного тестирования, принадлежит
семье фреймворков xUnit для разных языков программирования
JUnit породил систему расширений —
JMock, EasyMock, DbUnit, HttpUnit
JUnit. Функциональность
JUnit полностью построен на аннотациях.
◦ Все, что вам нужно сделать, – это обозначить тестовый метод с
помощью аннотации @Test.
◦ Настройка тестов @Before @After @BeforeClass @AfterClass
◦ Тестирование исключений @Test(expected=AnyException.class)
◦ TimeOut @Test(timeout=5000)
◦ Игнорирование @Ignore("Not running because <fill in a good reason
here>")
◦ Наборы тестов @RunWith(value=Suite.class)
@SuiteClasses(value={Test1.class, Test2.class})
◦ Параметризированные тесты @RunWith(value=Parameterized.class)
7
JUnit в примерах
8
JUnit4 в примерах
9
JUnit дополнительные
возможности
10
Правила(@Rule)
@Rulepublic finalTemporaryFolderfolder= new TemporaryFolder();//временные файлы
@Rulepublic finalTimeouttimeout= new Timeout(1000);//для задания таймаута
@Rulepublic finalExpectedExceptionthrown=ExpectedException.none();//для исключений
Правила - это некое подобие утилит для тестов, которые добавляют
функционал до и после выполнения теста.
TestNG
11
TestNG — это фреймворк для тестирования, написанный Java, он взял много
чего с JUnit и NUnit, но он не только унаследовался от существующей
функциональности Junit, а также внедрения новых инновационных функций,
которые делают его мощным, простым в использовании.
Какие возможности в TestNG?
1) Annotations. (Аннотация);
2) Использование XML для гибкого конфигурирования тестов;
3) Поддержка data-driven тестирования (с помощью аннотации
@DataProvider);
4) Тестирование кода проходит многопоточно, что дает безопасность и
быстродействие;
5) Легкий переход от JUnit.
TestNG. Аннотации
12
@BeforeSuite, @AfterSuite методы, которые исполняются единожды до/после исполнения
всех тестов.
@BeforeTest, @AfterTest методы, которые исполняются единожды до/после исполнения
теста.
@BeforeClass, @AfterClass методы, которые исполняются единожды до/после исполнения
всех тестов в классе. Идентичны предыдущим, но применимы к тест-классам.
@BeforeMethod, @AfterMethod методы, которые исполняются каждый раз до/после
исполнения тестового метода.
@BeforeGroups, @AfterGroups методы, которые исполняются до/после
первого/последнего теста принадлежащего к заданным группам.
Аннотация @Test обозначает сами тесты.
TestNG. Параметры
аннотаций
13
enabled — можно временно отключить, установив значение в false
groups — обозначает, для каких групп будет исполнен
inheritGroups — если true, метод будет наследовать группы от тест-класса
timeOut — время, после которого метод «свалится» и потянет за собой все зависимые от него
тесты
description — название, используемое в отчете
dependsOnMethods — методы, от которых зависит, сначала будут выполнены они, а затем данный
метод
dependsOnGroups — группы, от которых зависит
alwaysRun — если установить в true, будет вызываться всегда независимо от того, к каким группам
принадлежит, не применим к @BeforeGroups, @AfterGroups
Mocks
Mock-объект (от англ. mock object, буквально: объект-пародия, объект-
имитация) — тип объектов, реализующих заданные аспекты моделируемого
программного окружения.
Mock-объект представляет собой конкретную фиктивную
реализацию интерфейса, предназначенную исключительно для тестирования.
В процедурном программировании аналогичная конструкция называется
«dummy» (англ. — заглушка). Функция, выдающая константу, или случайную
величину из допустимого диапазона значений.
Mock-объекты активно используются в разработке через тестирование.
Моки это такие классы-заглушки (и соответсвенно объекты), которые
позволяют избавиться от внешних зависимостей при модульном (unit)
тестировании — ибо тестирование с зависимостями уже интеграционное или
системное и требует больших ресурсов, состояния данных и как следствие -
большей сложности.
С моками же можно тестировать контроллеры, где код с большей
ответсвенностью, который вызывает тяжёлые модели, у которых вся тяжёлая
логика веб-сервисов, баз данных, парсеров.. но которые уже покрыты тестами.
14
Mockito
Что умеет Mockito?
Создавать моки
Определять значение, возвращаемое методом мока
Выбрасывать исключение при вызове метода мока
Проверять:
порядок вызовов
количество вызовов
отсутствие вызовов
15
Mockito
Задание результата.
Используйте метод when() совместно со следующими методами:
◦ thenAnswer()
◦ thenReturn()
◦ thenThrow()
Если возвращаемый объект не задать, то по умолчанию будут возвращаться null, 0, false.
Матчеры
Если нужно одинаковое выполнение для некоторого набора параметров, то используйте
матчеры:
when(obj.c(anyString(), anyString())).thenReturn(true);
16
Mockito
Проверка вызова.
Используйте метод verify():
verify(obj).c(“”, “”);
verify(obj, times(1)).c(“”, “”);
verify(obj, atLeast(2)).c(“”, “”);
verify(obj, atMost(2)).c(“”, “”);
verify(obj, never()).c(“”, “”);
17
PowerMock
Расширение Mockito и EasyMock
Позволяет создавать моки на:
◦ static-методы
◦ private-методы
◦ final-методы
◦ конструкторы
18
PowerMock
Назначение.
Тестирование сторонних библиотек, к которым нет доступа на уровне исходников
Быстрое тестирование собственного плохого кода без проведения длительного рефакторинга
Использование.
Добавляем перед тестом аннотацию:
@RunWith(PowerMockRunner.class)
@PrepareForTest({ClassToBeMocked.class})
Либо используем JUnitRule (Junit 4.7+):
@PrepareForTest(X.class);
public class MyTest {
@Rule
PowerMockRule rule = new PowerMockRule();
// Tests goes here
}
19
Спасибо за внимание
10/18/2016 20

Contenu connexe

Tendances

Victor Kuliamin.CSEDays
Victor Kuliamin.CSEDaysVictor Kuliamin.CSEDays
Victor Kuliamin.CSEDays
LiloSEA
 
Исключительные ситуации
Исключительные ситуацииИсключительные ситуации
Исключительные ситуации
Alexey Bovanenko
 
Java весна 2013 лекция 9
Java весна 2013 лекция 9Java весна 2013 лекция 9
Java весна 2013 лекция 9
Technopark
 
05 Обработка Исключений
05 Обработка Исключений05 Обработка Исключений
05 Обработка Исключений
phearnot
 
Msu.Center.Lectures.J05 Handling Exceptions
Msu.Center.Lectures.J05 Handling ExceptionsMsu.Center.Lectures.J05 Handling Exceptions
Msu.Center.Lectures.J05 Handling Exceptions
olegol
 
Unit тестирование
Unit тестированиеUnit тестирование
Unit тестирование
Maxim Volchenko
 
Анастасия Бордонос - Проектирование тестов
Анастасия Бордонос - Проектирование тестовАнастасия Бордонос - Проектирование тестов
Анастасия Бордонос - Проектирование тестов
Yandex
 
Java. Lecture 05. Handling Exceptions and Debugging
Java. Lecture 05. Handling Exceptions and DebuggingJava. Lecture 05. Handling Exceptions and Debugging
Java. Lecture 05. Handling Exceptions and Debugging
colriot
 

Tendances (19)

Java mocking frameworks: Mockito and PowerMock
Java mocking frameworks: Mockito and PowerMockJava mocking frameworks: Mockito and PowerMock
Java mocking frameworks: Mockito and PowerMock
 
Victor Kuliamin.CSEDays
Victor Kuliamin.CSEDaysVictor Kuliamin.CSEDays
Victor Kuliamin.CSEDays
 
Dependency Injection на примере Unity и NInject
Dependency Injection на примере Unity и NInjectDependency Injection на примере Unity и NInject
Dependency Injection на примере Unity и NInject
 
Unit tests final
Unit tests finalUnit tests final
Unit tests final
 
Java Core. Lecture# 3. Part# 3. Multithreading.
Java Core. Lecture# 3. Part# 3. Multithreading.Java Core. Lecture# 3. Part# 3. Multithreading.
Java Core. Lecture# 3. Part# 3. Multithreading.
 
Исключительные ситуации
Исключительные ситуацииИсключительные ситуации
Исключительные ситуации
 
Java весна 2013 лекция 9
Java весна 2013 лекция 9Java весна 2013 лекция 9
Java весна 2013 лекция 9
 
Lec 14
Lec 14Lec 14
Lec 14
 
05 Обработка Исключений
05 Обработка Исключений05 Обработка Исключений
05 Обработка Исключений
 
ОЛЕКСАНДР ЄПІШЕВ «Мутаційне тестування: тести для тестів» Lviv QA Day 2019
ОЛЕКСАНДР ЄПІШЕВ «Мутаційне тестування: тести для тестів»  Lviv QA Day 2019ОЛЕКСАНДР ЄПІШЕВ «Мутаційне тестування: тести для тестів»  Lviv QA Day 2019
ОЛЕКСАНДР ЄПІШЕВ «Мутаційне тестування: тести для тестів» Lviv QA Day 2019
 
Msu.Center.Lectures.J05 Handling Exceptions
Msu.Center.Lectures.J05 Handling ExceptionsMsu.Center.Lectures.J05 Handling Exceptions
Msu.Center.Lectures.J05 Handling Exceptions
 
Unit тестирование
Unit тестированиеUnit тестирование
Unit тестирование
 
Методики «Inversion of Control» и «Dependency Injection». Применение в Spring.
Методики «Inversion of Control» и «Dependency Injection». Применение в Spring.Методики «Inversion of Control» и «Dependency Injection». Применение в Spring.
Методики «Inversion of Control» и «Dependency Injection». Применение в Spring.
 
Анастасия Бордонос - Проектирование тестов
Анастасия Бордонос - Проектирование тестовАнастасия Бордонос - Проектирование тестов
Анастасия Бордонос - Проектирование тестов
 
Java. Lecture 05. Handling Exceptions and Debugging
Java. Lecture 05. Handling Exceptions and DebuggingJava. Lecture 05. Handling Exceptions and Debugging
Java. Lecture 05. Handling Exceptions and Debugging
 
Статический анализ исходного кода на примере WinMerge
Статический анализ исходного кода на примере WinMergeСтатический анализ исходного кода на примере WinMerge
Статический анализ исходного кода на примере WinMerge
 
тестирование черного и белого ящиков презентация
тестирование черного и белого ящиков презентациятестирование черного и белого ящиков презентация
тестирование черного и белого ящиков презентация
 
Автоматизация тестирования многопоточности
Автоматизация тестирования многопоточностиАвтоматизация тестирования многопоточности
Автоматизация тестирования многопоточности
 
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
 

Similaire à Unit тесты java

iPhone Unit Testing (Google tool Box)
iPhone Unit Testing (Google tool Box)iPhone Unit Testing (Google tool Box)
iPhone Unit Testing (Google tool Box)
Yandex
 
Александр Ярулин - Автоматизация тестирования с xUnit
Александр Ярулин - Автоматизация тестирования с xUnitАлександр Ярулин - Автоматизация тестирования с xUnit
Александр Ярулин - Автоматизация тестирования с xUnit
Yandex
 
Unit testing
Unit testingUnit testing
Unit testing
ISsoft
 
Тестирование ПО
Тестирование ПОТестирование ПО
Тестирование ПО
seleznev_stas
 

Similaire à Unit тесты java (20)

Unit Testing
Unit TestingUnit Testing
Unit Testing
 
Mva stf module 2 - rus
Mva stf module 2 - rusMva stf module 2 - rus
Mva stf module 2 - rus
 
C++ STL & Qt. Занятие 10.
C++ STL & Qt. Занятие 10.C++ STL & Qt. Занятие 10.
C++ STL & Qt. Занятие 10.
 
iPhone Unit Testing (Google tool Box)
iPhone Unit Testing (Google tool Box)iPhone Unit Testing (Google tool Box)
iPhone Unit Testing (Google tool Box)
 
Александр Ярулин - Автоматизация тестирования с xUnit
Александр Ярулин - Автоматизация тестирования с xUnitАлександр Ярулин - Автоматизация тестирования с xUnit
Александр Ярулин - Автоматизация тестирования с xUnit
 
Unit tests Python examples
Unit tests Python examplesUnit tests Python examples
Unit tests Python examples
 
Testing RIA with Selenium
Testing RIA with SeleniumTesting RIA with Selenium
Testing RIA with Selenium
 
Java 9 - Back to the Future
Java 9 - Back to the FutureJava 9 - Back to the Future
Java 9 - Back to the Future
 
Дело тестера боится: как в опытных руках могут заиграть Java и TestNg
Дело тестера боится: как в опытных руках могут заиграть Java и TestNgДело тестера боится: как в опытных руках могут заиграть Java и TestNg
Дело тестера боится: как в опытных руках могут заиграть Java и TestNg
 
ClubQA #2. Unit testing and TDD
ClubQA #2. Unit testing and TDDClubQA #2. Unit testing and TDD
ClubQA #2. Unit testing and TDD
 
Unit testing and TDD
Unit testing and TDDUnit testing and TDD
Unit testing and TDD
 
Unit testing
Unit testingUnit testing
Unit testing
 
Автоматизация.pptx
Автоматизация.pptxАвтоматизация.pptx
Автоматизация.pptx
 
Tech Talks @NSU: Организация тестирования в IT-компаниях Академгородка. Карье...
Tech Talks @NSU: Организация тестирования в IT-компаниях Академгородка. Карье...Tech Talks @NSU: Организация тестирования в IT-компаниях Академгородка. Карье...
Tech Talks @NSU: Организация тестирования в IT-компаниях Академгородка. Карье...
 
Тестирование ПО
Тестирование ПОТестирование ПО
Тестирование ПО
 
TAP
TAPTAP
TAP
 
C# Desktop. Занятие 17.
C# Desktop. Занятие 17.C# Desktop. Занятие 17.
C# Desktop. Занятие 17.
 
Do you know what you are testing?
Do you know what you are testing?Do you know what you are testing?
Do you know what you are testing?
 
А вы знаете что тестируют ваши тесты?
А вы знаете что тестируют ваши тесты?А вы знаете что тестируют ваши тесты?
А вы знаете что тестируют ваши тесты?
 
Test levels
Test levelsTest levels
Test levels
 

Dernier

Cyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdfCyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdf
Хроники кибер-безопасника
 
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdfСИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
Хроники кибер-безопасника
 
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
Ирония безопасности
 
2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf
Хроники кибер-безопасника
 
CVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdfCVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdf
Хроники кибер-безопасника
 
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Ирония безопасности
 

Dernier (9)

Cyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdfCyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdf
 
MS Navigating Incident Response [RU].pdf
MS Navigating Incident Response [RU].pdfMS Navigating Incident Response [RU].pdf
MS Navigating Incident Response [RU].pdf
 
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdfMalware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
 
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdfСИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
 
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
 
2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf
 
CVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdfCVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdf
 
Ransomware_Q3 2023. The report [RU].pdf
Ransomware_Q3 2023.  The report [RU].pdfRansomware_Q3 2023.  The report [RU].pdf
Ransomware_Q3 2023. The report [RU].pdf
 
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
 

Unit тесты java

  • 2. Содержание UNIT и INTEGRATION тесты Приемущества модульного тестирования (UNIT тестов) JUnit — библиотека для модульного тестирования Mock-библиотеки 2
  • 3. UNIT и INTEGRATION тесты 3 Unit test: процесс в программировании, позволяющий проверить на корректность отдельные модули исходного кода программы.Идея состоит в том, чтобы писать тесты для каждого нетривиального метода. Integration test: одна из фаз тестирования программного обеспечения, при котором отдельные программные модули объединяются и тестируются в группе.
  • 4. Преимущества UNIT тестов Поощрение изменений Модульное тестирование позже позволяет программистам проводить рефакторинг, будучи уверенными, что модуль по-прежнему работает корректно . Упрощение интеграции Модульное тестирование помогает устранить сомнения по поводу отдельных модулей и может быть использовано для подхода к тестированию «снизу вверх»: сначала тестируются отдельные части программы, затем программа в целом. Документирование кода Модульные тесты можно рассматривать как «живой документ» для тестируемого класса. Клиенты, которые не знают, как использовать данный класс, могут использовать юнит-тест в качестве примера. Отделение интерфейса от реализации Поскольку некоторые классы могут использовать другие классы, тестирование отдельного класса часто распространяется на связанные с ним. Например, класс пользуется базой данных; в ходе написания теста программист обнаруживает, что тесту приходится взаимодействовать с базой. Это ошибка, поскольку тест не должен выходить за границу класса. В результате разработчик абстрагируется от соединения с базой данных и реализует этот интерфейс, используя свой собственный mock-объект. Это приводит к менее связанному коду, минимизируя зависимости в системе. 4
  • 5. Ограничения UNIT тестов Ошибки интеграции системного уровня Происходит тестирование каждого из модулей по отдельности. Это означает, что ошибки интеграции, системного уровня, функций, исполняемых в нескольких модулях не будут определены. Производительность Данная технология бесполезна для проведения тестов на производительность. Таким образом, модульное тестирование более эффективно при использовании в сочетании с другими методиками тестирования. 5
  • 6. JUnit 6 JUnit - библиотека для модульного тестирования, принадлежит семье фреймворков xUnit для разных языков программирования JUnit породил систему расширений — JMock, EasyMock, DbUnit, HttpUnit
  • 7. JUnit. Функциональность JUnit полностью построен на аннотациях. ◦ Все, что вам нужно сделать, – это обозначить тестовый метод с помощью аннотации @Test. ◦ Настройка тестов @Before @After @BeforeClass @AfterClass ◦ Тестирование исключений @Test(expected=AnyException.class) ◦ TimeOut @Test(timeout=5000) ◦ Игнорирование @Ignore("Not running because <fill in a good reason here>") ◦ Наборы тестов @RunWith(value=Suite.class) @SuiteClasses(value={Test1.class, Test2.class}) ◦ Параметризированные тесты @RunWith(value=Parameterized.class) 7
  • 10. JUnit дополнительные возможности 10 Правила(@Rule) @Rulepublic finalTemporaryFolderfolder= new TemporaryFolder();//временные файлы @Rulepublic finalTimeouttimeout= new Timeout(1000);//для задания таймаута @Rulepublic finalExpectedExceptionthrown=ExpectedException.none();//для исключений Правила - это некое подобие утилит для тестов, которые добавляют функционал до и после выполнения теста.
  • 11. TestNG 11 TestNG — это фреймворк для тестирования, написанный Java, он взял много чего с JUnit и NUnit, но он не только унаследовался от существующей функциональности Junit, а также внедрения новых инновационных функций, которые делают его мощным, простым в использовании. Какие возможности в TestNG? 1) Annotations. (Аннотация); 2) Использование XML для гибкого конфигурирования тестов; 3) Поддержка data-driven тестирования (с помощью аннотации @DataProvider); 4) Тестирование кода проходит многопоточно, что дает безопасность и быстродействие; 5) Легкий переход от JUnit.
  • 12. TestNG. Аннотации 12 @BeforeSuite, @AfterSuite методы, которые исполняются единожды до/после исполнения всех тестов. @BeforeTest, @AfterTest методы, которые исполняются единожды до/после исполнения теста. @BeforeClass, @AfterClass методы, которые исполняются единожды до/после исполнения всех тестов в классе. Идентичны предыдущим, но применимы к тест-классам. @BeforeMethod, @AfterMethod методы, которые исполняются каждый раз до/после исполнения тестового метода. @BeforeGroups, @AfterGroups методы, которые исполняются до/после первого/последнего теста принадлежащего к заданным группам. Аннотация @Test обозначает сами тесты.
  • 13. TestNG. Параметры аннотаций 13 enabled — можно временно отключить, установив значение в false groups — обозначает, для каких групп будет исполнен inheritGroups — если true, метод будет наследовать группы от тест-класса timeOut — время, после которого метод «свалится» и потянет за собой все зависимые от него тесты description — название, используемое в отчете dependsOnMethods — методы, от которых зависит, сначала будут выполнены они, а затем данный метод dependsOnGroups — группы, от которых зависит alwaysRun — если установить в true, будет вызываться всегда независимо от того, к каким группам принадлежит, не применим к @BeforeGroups, @AfterGroups
  • 14. Mocks Mock-объект (от англ. mock object, буквально: объект-пародия, объект- имитация) — тип объектов, реализующих заданные аспекты моделируемого программного окружения. Mock-объект представляет собой конкретную фиктивную реализацию интерфейса, предназначенную исключительно для тестирования. В процедурном программировании аналогичная конструкция называется «dummy» (англ. — заглушка). Функция, выдающая константу, или случайную величину из допустимого диапазона значений. Mock-объекты активно используются в разработке через тестирование. Моки это такие классы-заглушки (и соответсвенно объекты), которые позволяют избавиться от внешних зависимостей при модульном (unit) тестировании — ибо тестирование с зависимостями уже интеграционное или системное и требует больших ресурсов, состояния данных и как следствие - большей сложности. С моками же можно тестировать контроллеры, где код с большей ответсвенностью, который вызывает тяжёлые модели, у которых вся тяжёлая логика веб-сервисов, баз данных, парсеров.. но которые уже покрыты тестами. 14
  • 15. Mockito Что умеет Mockito? Создавать моки Определять значение, возвращаемое методом мока Выбрасывать исключение при вызове метода мока Проверять: порядок вызовов количество вызовов отсутствие вызовов 15
  • 16. Mockito Задание результата. Используйте метод when() совместно со следующими методами: ◦ thenAnswer() ◦ thenReturn() ◦ thenThrow() Если возвращаемый объект не задать, то по умолчанию будут возвращаться null, 0, false. Матчеры Если нужно одинаковое выполнение для некоторого набора параметров, то используйте матчеры: when(obj.c(anyString(), anyString())).thenReturn(true); 16
  • 17. Mockito Проверка вызова. Используйте метод verify(): verify(obj).c(“”, “”); verify(obj, times(1)).c(“”, “”); verify(obj, atLeast(2)).c(“”, “”); verify(obj, atMost(2)).c(“”, “”); verify(obj, never()).c(“”, “”); 17
  • 18. PowerMock Расширение Mockito и EasyMock Позволяет создавать моки на: ◦ static-методы ◦ private-методы ◦ final-методы ◦ конструкторы 18
  • 19. PowerMock Назначение. Тестирование сторонних библиотек, к которым нет доступа на уровне исходников Быстрое тестирование собственного плохого кода без проведения длительного рефакторинга Использование. Добавляем перед тестом аннотацию: @RunWith(PowerMockRunner.class) @PrepareForTest({ClassToBeMocked.class}) Либо используем JUnitRule (Junit 4.7+): @PrepareForTest(X.class); public class MyTest { @Rule PowerMockRule rule = new PowerMockRule(); // Tests goes here } 19