You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
devel/Cобеседование по Java. TEST...

123 lines
13 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# Cобеседование по Java. Разбор вопросов и ответов.
<a href="https://mc.yandex.ru/pixel/8711235002931986822?rnd=%aw_random%">
<img src="https://mc.yandex.ru/pixel/8711235002931986822?rnd=%aw_random%" />
</a>&nbsp;&nbsp;
<a href="https://mc.yandex.ru/watch/92801430">
<img src="https://mc.yandex.ru/watch/92801430" />
</a>&nbsp;&nbsp;
Нажмите ★, если вам нравится проект. Ваш вклад сердечно ♡ приветствуется.
Если вам интересно мое резюме: https://github.com/DEBAGanov
# Тестирование
- [Cобеседование по Java. Разбор вопросов и ответов.](#cобеседование-по-java-разбор-вопросов-и-ответов)
- [Тестирование](#тестирование)
- [Что такое _«модульное тестирование»_?](#что-такое-модульное-тестирование)
- [Что такое _«компонентное тестирование»_?](#что-такое-компонентное-тестирование)
- [Что такое _«интеграционное тестирование»_?](#что-такое-интеграционное-тестирование)
- [Чем интеграционное тестирование отличается от модульного?](#чем-интеграционное-тестирование-отличается-от-модульного)
- [Какие существуют виды тестовых объектов?](#какие-существуют-виды-тестовых-объектов)
- [Чем _stub_ отличается от _mock_?](#чем-stub-отличается-от-mock)
- [Что такое _«фикстуры»_?](#что-такое-фикстуры)
- [Какие аннотации фикстур существуют в JUnit?](#какие-аннотации-фикстур-существуют-в-junit)
- [Для чего в JUnit используется аннотация `@Ignore`?](#для-чего-в-junit-используется-аннотация-ignore)
- [Источники](#источники)
![Image alt](https://github.com/Shell26/Java-Developer/raw/master/img/Test1.png)
## Что такое _«модульное тестирование»_?
__Модульное/компонентное тестирование (unit testing)__ - процесс в программировании, позволяющий проверить на корректность отдельные модули исходного кода программы. Идея состоит в том, чтобы писать тесты для каждой нетривиальной функции или метода. Это позволяет достаточно быстро проверить, не привело ли очередное изменение кода к регрессии, то есть к появлению ошибок в уже оттестированных местах программы, а также облегчает обнаружение и устранение таких ошибок.
Модульные тесты можно условно поделить на две группы:
+ есты состояния (state based)_, проверяющие что вызываемый метод объекта отработал корректно, проверяя состояние тестируемого объекта после вызова метода.
+ есты взаимодействия (interaction tests)_, в которых тестируемый объект производит манипуляции с другими объектами. Применяются, когда требуется удостовериться, что тестируемый объект корректно взаимодействует с другими объектами.
[к оглавлению](#Тестирование)
## Что такое _«компонентное тестирование»_?
Проверяет функциональность и ищет дефекты в частях приложения, которые доступны и могут быть протестированы по-отдельности (модули программ, объекты, классы, функции и т.д.). Обычно проводится вызывая код, который необходимо проверить и при поддержке сред разработки, таких как фреймворки (frameworks - каркасы) для модульного тестирования или инструменты для отладки.
По-существу компонентные и модульные тестирования представляют одно и тоже, разница лишь в том, что в компонентном тестировании в качестве параметров функций используют реальные объекты и драйверы, а в модульном тестировании - конкретные значения.
[к оглавлению](#Тестирование)
## Что такое _«интеграционное тестирование»_?
__Интеграционное тестирование (integration testing)__ — это тестирование, проверяющие работоспособность двух или более модулей системы в совокупности — то есть нескольких объектов как единого блока. В тестах взаимодействия же тестируется конкретный, определенный объект и то, как именно он взаимодействует с внешними зависимостями.
[к оглавлению](#Тестирование)
## Чем интеграционное тестирование отличается от модульного?
С технологической точки зрения интеграционное тестирование является количественным развитием модульного, поскольку так же, как и модульное тестирование, оперирует интерфейсами модулей и подсистем и требует создания тестового окружения, включая заглушки на месте отсутствующих модулей. Основная разница между модульным и интеграционным тестированием состоит в целях, то есть в типах обнаруживаемых дефектов, которые, в свою очередь, определяют стратегию выбора входных данных и методов анализа.
> Допустим, есть класс, который при определенных условиях взаимодействует с web-сервисом через зависимый объект. И нам надо проверить, что определенный метод зависимого объекта действительно вызывается. Если в качестве зависимого класса передать:
> + реальный класс, работающий с web-сервисом, то это будет интеграционное тестирование.
> + заглушку, то это будет тестирование состояния.
> + шпиона, а в конце теста проверить, что определенный метод зависимого объекта действительно был вызван, то это будет тест взаимодействия.
[к оглавлению](#Тестирование)
## Какие существуют виды тестовых объектов?
__пустышка (dummy)__ - объект, который обычно передается в тестируемый класс в качестве параметра, но не имеет поведения: с ним ничего не происходит и никакие его методы не вызываются.
> Примером dummy-объектов являются new object(), null, «Ignored String» и т.д.
__фальшивка (fake object)__ применяется в основном для ускорения запуска ресурсоёмких тестов и является заменой тяжеловесного внешнего зависимого объекта его легковесной реализацией.
> Основные примеры — эмулятор базы данных (fake database) или фальшивый web-сервис.
__заглушка (test stub)__ используется для получения данных из внешней зависимости, подменяя её. При этом заглушка игнорирует все данные поступающие из тестируемого объекта, возвращая заранее определённый результат.
> Тестируемый объект использует чтение из конфигурационного файла? Тогда передаем ему заглушку `ConfigFileStub` возвращающую тестовые строки конфигурации без обращения к файловой системе.
__шпион (test spy)__ - разновидность заглушки, которая умеет протоколировать сделанные к ней обращения из тестируемой системы, чтобы проверить их правильность в конце теста. При этом фиксируется количество, состав и содержание параметров вызовов.
> Если существует необходимость проверки, что определённый метод тестируемого класса вызывался ровно 1 раз, то шпион - имменно то, что нам нужно.
__фикция (mock object)__ похож на _шпиона_, но обладает расширенной функциональностью, заранее заданными поведением и реакцией на вызовы.
[к оглавлению](#Тестирование)
## Чем _stub_ отличается от _mock_?
_stub_ используется как заглушка сервисов, методов, классов и т.д. с заранее запрограммированным ответом на вызовы.
_mock_ использует подмену результатов вызова, проверяет сам факт взаимодействия, протоколирует и контролирует его.
[к оглавлению](#Тестирование)
## Что такое _«фикстуры»_?
__Фикстуры (fixtures)__ - состояние среды тестирования, которое требуется для успешного выполнения теста. Основная задача фикстур заключается в подготовке тестового окружения с заранее фиксированным/известным состоянием, чтобы гарантировать повторяемость процесса тестирования.
[к оглавлению](#Тестирование)
## Какие аннотации фикстур существуют в JUnit?
+ `@BeforeClass` - определяет код, который должен единожды выполниться перед запуском набора тестовых методов.
+ `@AfterClass` - код, выполняемый один раз после исполнения набора тестовых методов.
+ `@Before` - определяет код, который должен выполняться каждый раз перд запуском любого тестовым методом.
+ `@After` - код, выполняемый каждый раз после исполнения любого тестового метода.
[к оглавлению](#Тестирование)
## Для чего в JUnit используется аннотация `@Ignore`?
`@Ignore` указывает JUnit на необходимость пропустить данный тестовый метод.
[к оглавлению](#Тестирование)
# Источники
+ [Википедия](https://ru.wikipedia.org/wiki/Тестирование_программного_обеспечения)
+ [Хабрахабр](https://habrahabr.ru/post/116372/)
+ [Интуит](http://www.intuit.ru/department/se/testing/5/2.html)
[Вопросы для собеседования](README.md)