27
Курс по Java, 2016 Тестирование и Java Юнит-тесты

Курс Java-2016. Занятие 05. Тестирование и Java

  • Upload
    7bits

  • View
    436

  • Download
    5

Embed Size (px)

Citation preview

Page 1: Курс Java-2016. Занятие 05. Тестирование и Java

Курс по Java, 2016

Тестирование и JavaЮнит-тесты

Page 2: Курс Java-2016. Занятие 05. Тестирование и Java

Курс по Java, 2016

Виды тестирования

Page 3: Курс Java-2016. Занятие 05. Тестирование и Java

Курс по Java, 2016

Юнит-тесты

Page 4: Курс Java-2016. Занятие 05. Тестирование и Java

Курс по Java, 2016

Юнит-тестирование

Постоянно и непрерывно

Легко проверить всё повторно

Пишем конкретные тесты

Тесты запускают настоящий код

Тестируем каждый кусочек по-отдельности

Тестируем при каждом изменении кода

Проверяем, как оно функционирует

Автоматически

Можно знать, как устроен модуль

Тестируем каждый метод

Page 5: Курс Java-2016. Занятие 05. Тестирование и Java

Курс по Java, 2016

Юнит-тесты — хорошо

Уверенность в коде, можно рефакторить

Тест — хорошая документация

Меньше отладки, более продуктивная разработка

Получаются более независимые модули

Получаются правильные абстракции, появляется тестовая реализация

Page 6: Курс Java-2016. Занятие 05. Тестирование и Java

Курс по Java, 2016

Юнит-тесты — сложно

Тесты нужно писать, трудно привыкнуть

Для каждой версии кода нужно отслеживать результаты тестов

Невозможно протестировать всё: безопасность, функционал, UI плохо поддаются автоматическому тестированию

Page 7: Курс Java-2016. Занятие 05. Тестирование и Java

Курс по Java, 2016

Юнит-тесты — опасно

Тесты могут быть ошибочными,правильность модулей не означает правильность системы в целом, заглушки — не настоящие

Создают ложное ощущение надежностиЕсть соблазн отключения нерабочих тестов

Page 8: Курс Java-2016. Занятие 05. Тестирование и Java

Курс по Java, 2016

JUnit

<dependencies> <dependency> <scope>test</scope> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency></dependencies>

Maven scopes:● compile● provided● runtime● test

Page 9: Курс Java-2016. Занятие 05. Тестирование и Java

Курс по Java, 2016

Тестimport org.junit.Before;import org.junit.Test;

import static org.junit.Assert.assertArrayEquals;

public class ArrayReverserTest {

private ArrayReverser reverser;

@Before public void setUp() { this.reverser = new ArrayReverser(); }

@Test public void testReverse() { int[] original = {1, 2, 3}; int[] reversed = this.reverser.reverse(original); assertArrayEquals("wrong reverse", new int[] {3, 2, 1}, reversed); }

}

Page 10: Курс Java-2016. Занятие 05. Тестирование и Java

Курс по Java, 2016

JUnit в IDEA

Page 11: Курс Java-2016. Занятие 05. Тестирование и Java

Курс по Java, 2016

JUnit в Maven % mvn package[INFO] Scanning for projects...[INFO] [INFO] ------------------------------------------------------------------------[INFO] Building tdd 0.0.1-SNAPSHOT[INFO] ------------------------------------------------------------------------[INFO] ...

------------------------------------------------------- T E S T S-------------------------------------------------------Running ArrayReverserTestTests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0 secResults :

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0

...[INFO] ------------------------------------------------------------------------[INFO] BUILD SUCCESS[INFO] ------------------------------------------------------------------------[INFO] Total time: 1.521s[INFO] Finished at: Thu Mar 31 19:23:27 OMST 2016[INFO] Final Memory: 9M/266M[INFO] ------------------------------------------------------------------------

Page 12: Курс Java-2016. Занятие 05. Тестирование и Java

Курс по Java, 2016

Maven lifecycle

Page 13: Курс Java-2016. Занятие 05. Тестирование и Java

Курс по Java, 2016

JUnit в Maven % mvn test

% mvn -Dmaven.test.skip=true package

Page 14: Курс Java-2016. Занятие 05. Тестирование и Java

Курс по Java, 2016

Покрытие в IDEA

Page 15: Курс Java-2016. Занятие 05. Тестирование и Java

Курс по Java, 2016

Покрытиев Maven

<build> <plugins> <plugin> <groupId>org.jacoco</groupId> <artifactId>jacoco-maven-plugin</artifactId> <version>0.7.6.201602180812</version> <executions> <execution> <goals> <goal>prepare-agent</goal> </goals> </execution> <execution> <id>report</id> <phase>prepare-package</phase> <goals> <goal>report</goal> </goals> </execution> </executions> </plugin> <plugin> <artifactId>maven-surefire-plugin</artifactId> <version>2.10</version> <configuration> <argLine>${argLine}</argLine> </configuration> </plugin> </plugins></build>

Page 16: Курс Java-2016. Занятие 05. Тестирование и Java

Курс по Java, 2016

Покрытие в Maven

% mvn jacoco:prepare-agent % mvn test % mvn jacoco:report

Page 17: Курс Java-2016. Занятие 05. Тестирование и Java

Курс по Java, 2016

Домашнее задание

Написать юнит-тесты для всех методов всех написанных в рамках проекта классов.

Добиться 100% покрытия.

Page 18: Курс Java-2016. Занятие 05. Тестирование и Java

Курс по Java, 2016

Page 19: Курс Java-2016. Занятие 05. Тестирование и Java

Курс по Java, 2016

Page 20: Курс Java-2016. Занятие 05. Тестирование и Java

Курс по Java, 2016

Page 21: Курс Java-2016. Занятие 05. Тестирование и Java

Курс по Java, 2016

Page 22: Курс Java-2016. Занятие 05. Тестирование и Java

Курс по Java, 2016

Page 23: Курс Java-2016. Занятие 05. Тестирование и Java

Курс по Java, 2016

TDD buzzwords

keep it simple, stupid - KISS

you ain’t gonna need it - YAGNI

fake it till you make it

Page 24: Курс Java-2016. Занятие 05. Тестирование и Java

Курс по Java, 2016

Extreme Programming (XP)

Page 25: Курс Java-2016. Занятие 05. Тестирование и Java

Курс по Java, 2016

Agile Manifesto

Личности и их взаимодействия важнее, чем процессы и инструменты;

Работающее программное обеспечение важнее, чем полная документация;

Сотрудничество с заказчиком важнее, чем контрактные обязательства;

Реакция на изменения важнее, чем следование плану.

Page 26: Курс Java-2016. Занятие 05. Тестирование и Java

Курс по Java, 2016

Page 27: Курс Java-2016. Занятие 05. Тестирование и Java

Курс по Java, 2016

Denis Nelubin
http://www.plantuml.com/plantuml/img/POzD3i8W44Rtd68km0KQuygj6tyEGEYd8GKa7Lmqwjs5QWgqR0ZpFTxC1AK7TGTTm95UWjBHLZ7JrPkOYrNf-D330G6-XzUJ-8Zm_to2ikU98znAqMDS7CP7Z3UbGPMZmDdHo4LvqUujvOgWZemB5Wu-yePjHsrPiSn5KkwfmPwC6VZjFkU5xYYcY-iu0zjUAMVn1G00