Чем медленнее и дороже обнаруживать и исправлять дефекты, тем меньше у программистов времени для реализации каких-нибудь возможностей. Баги могут быть наиболее очевидной проблемой для плохо написанного кода, но такой код также является крайне неудобным для поддержки и медленным и дорогостоящим для дальнейшего развития. Неудобство в обслуживании, медленная разработка. Одним из минусов является то, что код сложен для понимания и, следовательно, сложен для изменения. Это очень реальная проблема, потому что программное обеспечение всегда меняется. Вместо того, чтобы переписывать каждый раз код, когда необходимо изменить или добавить что-то, необходимо иметь возможность опираться на то, что уже есть. И это то, что позволяет удовлетворять меняющиеся потребности бизнеса. С не поддерживаемым кодом мы движемся медленнее, чем хотелось бы, что часто приводит к постоянно растущему давлению, что в итоге заставляет нас поставлять еще более плохо написанный код. Это порочный круг, который должен закончиться, если мы хотим быть в состоянии “доброго” программиста.
Однако не все так хорошо, как хотелось бы, есть у этого подхода и свои недостатки. Например, автоматизация тестов GUI на этапе разработки стоит дороже, чем ручное тестирование. Это даже дороже, если кто-то пытается автоматизировать TDD способом, потому что инструменты автоматизации тестирования GUI ориентированы на существующие системы. Было бы прагматично автоматизировать регрессионные тесты GUI после завершения этапа разработки. В целом, автоматизация тестирования GUI обходится дорого следующими аспектами: Сложность - количество возможных взаимодействий пользователей из разных состояний приложения растет по мере увеличения функциональности графического интерфейса. Проверка - по мере увеличения сложности становится все труднее создавать сценарии автоматического тестирования, охватывающие достаточное количество случаев. Изменение - GUI очень часто меняются во время разработки, поэтому обслуживание тестового сценария становится бременем.
Целью выпускной квалификационной работы является создание приложения для автоматического тестирования кода на языке Java.
Задачами данной работы являются исследование техники написания программного обеспечения через тестирование, сравнительный анализ разных версий фреймворка JUnit из семейства SUnit для модульного тестирования отдельных методов приложения, исследование фреймворка Mockito для создания заглушек и spy-объектов, их использование для модульного тестирования корректности обработки POST/GET запросов в rest-api сервисе,
а также применение полученных знаний в разработке приложения с графическим пользовательским интерфейсом для автоматического тестирования кода на языке Java.
ВВЕДЕНИЕ........................................................................................................ 3
1 Инструменты для разработки через тестирование (TDD)......................... 7
1.1 JUnit............................................................................................................ 7
1.2 JUnit 3.X...................................................................................................... 9
1.4 JUnit 5.X................................................................................................... 17
2 Mockito вместе с JUnit................................................................................... 22
2.1 Описание.................................................................................................. 22
2.2 Создание заглушки................................................................................. 23
2.3 Определение поведения mock-объекта................................................. 25
2.4 Контроль количества вызовов.............................................................. 26
2.5 Обработка исключений.......................................................................... 27
2.6 Использование интерфейса org.mockito.stubbing.Answer<T>........... 28
2.7 Использование шпиона Spy................................................................... 29
3 Разработка тестов для rest-api сервиса....................................................... 30
4 JavaFX............................................................................................................ 36
5 Разработка UI с помощью FXML............................................................... 39
ЗАКЛЮЧЕНИЕ............................................................................................. 58
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ................................. 60
ПРИЛОЖЕНИЕ.................................................................................................. 61
1. Koskela, L.A. Test Driven. Practicial TDD and Acceptance TDD for Java Developers / L.A. Koskela. – Greenwich, 2008. - 585 c.
2. Форум программистов: Mockito и как его готовить [Электронный ресурс]. – 2019. – Режим доступа: https://habr.com/ru/post/444982/ (дата обращения: 24.04.20)
3. Блог разработчиков JUnit: JUnit 5 [Электронный ресурс]. – 2020. –Режим доступа: https://junit.org/junit5/ (дата обращения: 17.04.20)
4. Metanit: Введение в JavaFX [Электронный ресурс]. – 2020. – Режим доступа: https://metanit.com/java/javafx/1.1.php (дата обращения: 05.05.20)
5. Документация библиотеки JavaAssist: Getting Started with Javassist [Электронный ресурс]. – 2020. – Режим доступа: https://www.javassist.org/tutorial/tutorial.html (дата обращения: 17.05.20)