Saint Petersburg, 2012 Java Lecture #3 Test Frameworks.

Презентация:



Advertisements
Похожие презентации
Кафедра ОСУ, Java 2004 Слайд 1 Наследование Наследование позволяет использовать существующий класс для определения новых классов, т.е. способствует.
Advertisements

Software engineering Дмитриев Андрей Владиславович ©
1 Диаграммы реализации (implementation diagrams).
LOGO Модульное тестирование. Виды тестов Модульные Тестируется функционал ограниченной части кода (минимум – класса) Тесты изолированы от других частей.
Microsoft TechDays Прукс Александр
САОД кафедра ОСУ 1 Основные абстрактные типы данных Схема процесса создания программ для решения прикладных задач ВУ.
Mock-объекты mock (англ.) – ложный, фиктивный, мнимый, фальшивый, поддельный.
Перегрузка операторов x = a + b результат 1-й операнд2-й операнд оператор По количеству операндов операторы делятся на: унарные (один операнд) бинарные.
Основы информатики Классы Заикин Олег Сергеевич zaikin.all24.org
Учебный курс Объектно-ориентированный анализ и программирование Лекция 7 Методы как средство реализации операций Лекции читает кандидат технических наук.
Учебный курс Объектно-ориентированный анализ и программирование Лекция 4 Трансформация логической модели в программный код Лекции читает кандидат технических.
Методика автоматизации поиска некорректных модульных тестов Алексей Лянгузов. Sun Microsystems, Inc.
EXtreme Programming XP Тема 3. XP Пусть есть некоторая информационная система для банков. В качестве основной валюты для расчетов используется доллар,
Институт системного программирования РАН Автоматическая генерация базовых тестов для программных интерфейсов библиотек на основе заголовочных файлов Владимир.
Полиморфизм. Полиморфизм – это свойство системы использовать объекты с одинаковым интерфейсом без информации о типе и внутренней структуре объекта.
Team System - фреймворк для автоматизации тестирования от Microsoft Футорняк Елена Apriorit Сообщество Тестировщиков Днепропетровска 29/09/2011.
EXtreme Programming XP Тема 4. XP Тест – это процедура, которая позволяет либо подтвердить, либо опровергнуть работоспособность кода. Тесты должны быть.
Ассоциативные списки Поиск данных происходит не по индексу или положению объекта, а по его ассоциативной связи: public interface Map { // Доступ к объектам.
Классы в C#. Две роли классов Класс Класс – это модуль, архитектурная единица построения программной системы. Модульность построения – основное свойство.
OpenGL и Direct3D сравнение стандартов Выполнил: Пенкин А. Группа И-204.
Транксрипт:

Saint Petersburg, 2012 Java Lecture #3 Test Frameworks

Agenda UNIT и INTEGRATION тесты Приемущества модульного тестирования (UNIT тестов) JUnit библиотека для модульного тестирования Mock-библиотеки Разработка через тестирование TDD (test-driven development) 2

UNIT и INTEGRATION тесты 3 Unit test: процесс в программировании, позволяющий проверить на корректность отдельные модули исходного кода программы.Идея состоит в том, чтобы писать тесты для каждого нетривиального метода. Integration test : одна из фаз тестирования программного обеспечения, при котором отдельные программные модули объединяются и тестируются в группе.

Приемущества UNIT тестов Поощрение изменений Модульное тестирование позже позволяет программистам проводить рефакторинг, будучи уверенными, что модуль по-прежнему работает корректно. Упрощение интеграции Модульное тестирование помогает устранить сомнения по поводу отдельных модулей и может быть использовано для подхода к тестированию «снизу вверх»: сначала тестируются отдельные части программы, затем программа в целом. Документирование кода Модульные тесты можно рассматривать как «живой документ» для тестируемого класса. Клиенты, которые не знают, как использовать данный класс, могут использовать юнит-тест в качестве примера. Отделение интерфейса от реализации Поскольку некоторые классы могут использовать другие классы, тестирование отдельного класса часто распространяется на связанные с ним. Например, класс пользуется базой данных; в ходе написания теста программист обнаруживает, что тесту приходится взаимодействовать с базой. Это ошибка, поскольку тест не должен выходить за границу класса. В результате разработчик абстрагируется от соединения с базой данных и реализует этот интерфейс, используя свой собственный mock-объект. Это приводит к менее связанному коду, минимизируя зависимости в системе.mock-объект 4

Ограничения UNIT тестов Ошибки интеграции системного уровня Происходит тестирование каждого из модулей по отдельности. Это означает, что ошибки интеграции, системного уровня, функций, исполняемых в нескольких модулях не будут определены. Производительность Данная технология бесполезна для проведения тестов на производительность. Таким образом, модульное тестирование более эффективно при использовании в сочетании с другими методиками тестирования. 5

JUnit библиотека для модульного тестирования 6 JUnit принадлежит семье фреймворков xUnit для разных языков программированияxUnit JUnit породил систему расширений JMock, EasyMock, DbUnit, HttpUnitJMockEasyMockDbUnitHttpUnit

Функциональность JUnit 4 JUnit 4 полностью построен на аннотациях. Все, что вам нужно сделать, – это обозначить тестовый метод с помощью Тестирование Игнорирование running because ") Test2.class}) Параметризированные 7

JUnit4 в примерах 8 public class Calculator { public Integer maxValue(Integer a, Integer b) { if (a == null || b == null) { throw new IllegalArgumentException("Param must be not null"); } if (a < b) { return b; } return a; }

JUnit4 в примерах 9 public class CalculatorTest { private Calculator public void initCalculator() { calculator = new Calculator(); public void maxValueTest() { Integer actual = calculator.maxValue(Integer.valueOf(10), Integer.valueOf(20)); Assert.assertEquals(Integer.valueOf(20), actual); = IllegalArgumentException.class) public void exceptionTest() { calculator.maxValue(Integer.valueOf(10), null); }

JUnit4 дополнительные возможности 10 public final TemporaryFolder folder = new TemporaryFolder(); // временные public final Timeout timeout = new Timeout(1000); // для задания public final ExpectedException thrown = ExpectedException.none();// для исключений Правила это некое подобие утилит для тестов, которые добавляют функционал до и после выполнения теста.

JUnit4 дополнительные возможности 11 Runner JUnit4 по умолчанию предназначена для запуска JUnit 4 тестов. Suite для запуска последовательности тестов. Для настройки запускаемых тестов используется – организация тестов в категории

JUnit4 дополнительные возможности 12 Multithreaded unit tests public interface Counter { int incrementAndGet(); } public class DumbCounter implements Counter { private int public int incrementAndGet() { return ++counter; }

JUnit4 дополнительные возможности 13 Multithreaded unit tests public class AtomicIntCounter implements Counter { private AtomicInteger atomicInt = new public int incrementAndGet() { return atomicInt.incrementAndGet(); }

TestNG 14 Фреймовик для тестирования TestNG, аналог Junit Иерархия: +- suite/ +- test0/ | +- class0/ | | +- method0(integration group)/ | | +- method1(functional group)/ | | +- method2/ | +- class1 | +- method3(optional group)/ +- test1/ +- class3(optional group, integration group)/ +- method4/

TestNG before suite/ +- before group/ +- before test/ +- before class/ +- before method/ +- test/ +- after method/ after class/ after test/ after group/ after suite/

TestNG 16 Фреймовик для тестирования TestNG, аналог обозначают методы, которые исполняются единожды до/после исполнения всех тестов. Здесь удобно располагать какие-либо тяжелые настройки общие для всех тестов, например, здесь можно создать пул соединений с базой обозначают методы, которые исполняются единожды до/после исполнения теста(тот, который включает в себя тестовые классы, не путать с тестовыми методами). Здесь можно хранить настройки какой-либо группы взаимосвязанных сервисов, либо одного сервиса, если он тестируется несколькими обозначают методы, которые исполняются единожды до/после исполнения всех тестов в классе, идентичны предыдущим, но применимы к тест-классам. Наиболее применим для тестирования какого-то определенного сервиса, который не меняет свое состояние в результате обозначают методы, которые исполняются каждый раз до/после исполнения тестового метода. Здесь удобно хранить настройки для определенного бина или сервиса, если он не меняет свое состояние в результате обозначает методы, которые исполняются до/после первого/последнего теста принадлежащего к заданным группам. обозначает сами тесты. Здесь размещаются проверки. Также применима к классам

TestNG 17 У всех этих аннотаций есть следующие параметры: enabled можно временно отключить, установив значение в false groups обозначает, для каких групп будет исполнен inheritGroups если true(а по умолчанию именно так), метод будет наследовать группы от тест- класса timeOut время, после которого метод «свалится» и потянет за собой все зависимые от него тесты description название, используемое в отчете dependsOnMethods методы, от которых зависит, сначала будут выполнены они, а затем данный метод dependsOnGroups группы, от которых зависит alwaysRun если установить в true, будет вызываться всегда независимо от того, к каким группам принадлежит, не

Mocks 18 Mock-объект (от англ. mock object, буквально: объект-пародия, объект- имитация) тип объектов, реализующих заданные аспекты моделируемого программного окружения.англ.объектов Mock-объект представляет собой конкретную фиктивную реализацию интерфейса, предназначенную исключительно для тестирования.интерфейса В процедурном программировании аналогичная конструкция называется «dummy» (англ. заглушка). Функция, выдающая константу, или случайную величину из допустимого диапазона значений. Mock-объекты активно используются в разработке через тестирование. Моки это такие классы-заглушки (и соответсвенно объекты), которые позволяют избавиться от внешних зависимостей при модульном (unit) тестировании ибо тестирование с зависимостями уже интеграционное или системное и требует больших ресурсов, состояния данных и как следствие - большей сложности. С моками же можно тестировать контроллеры, где код с большей ответсвенностью, который вызывает тяжёлые модели, у которых вся тяжёлая логика веб-сервисов, баз данных, парсеров.. но которые уже покрыты тестами.

Mockito 19 Что умеет Mockito? Создавать моки Определять значение, возвращаетмое методом мока Выбрасывать исключение при вызове метода мока Проверять: порядок вызовов количество вызовов отсутствие вызовов

Mockito 20 Задание результата. Используйте метод when() совместно со следующими методами: thenAnswer() thenReturn() thenThrow() Если возвращаемый объект не задать, то по умолчанию будут возвращаться null, 0, false. Матчеры Если нужно одинаковое выполнение для некоторого набора параметров, то используйте матчеры: when(obj.c(anyString(), anyString())).thenReturn(true);

Mockito 21 Проверка вызова. Используйте метод verify(): verify(obj).c(, ); verify(obj, times(1)).c(, ); verify(obj, atLeast(2)).c(, ); verify(obj, atMost(2)).c(, ); verify(obj, never()).c(, );

PowerMock 22 Расширение Mockito и EasyMock Позволяет создавать моки на: static-методы private-методы final-методы конструкторы

PowerMock 23 Назначение. Тестирование сторонних библиотек, к которым нет доступа на уровне исходников Быстрое тестирование собственного плохого кода без проведения длительного рефакторинга Использование. Добавляем перед Либо используем JUnitRule (Junit public class MyTest PowerMockRule rule = new PowerMockRule(); // Tests goes here }

Разработка через тестирование Разработка через тестирование (test-driven development, TDD) техника разработки программного обеспечения, которая основывается на повторении очень коротких циклов разработки: сначала пишется тест, покрывающий желаемое изменение, затем пишется код, который позволит пройти тест, и под конец проводится рефакторинг нового кода к соответствующим стандартам. 24

Разработка через тестирование 25 Добавление теста( фокусирует внимание девелопера на бизнес требованиях а не на написании кода ) Запуск тестов и получение отрицательных результатов Написание кода под имеющиеся тесты Запуск тестов и проверка их прохождения Рефакторинг кода