Выбор ответа Middle Тестирование: JUnit 5 и Mockito обновлено

Состояние в полях тестового класса

Вопрос

В тестовом классе JUnit 5 есть поле List<String> log = new ArrayList<>(). Тест A добавляет элемент, тест B проверяет, что список пуст. Пройдёт ли B?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Да: JUnit по умолчанию создаёт новый экземпляр на каждый тест. Режим по умолчанию Lifecycle.PERMETHOD: каждый тест получает свежий экземпляр, поэтому поля не делятся.

Варианты ответа

  1. Нет: поле общее для всех тестов класса и хранит запись A
  2. Зависит от порядка выполнения, который JUnit не гарантирует
  3. Да: JUnit по умолчанию создаёт новый экземпляр на каждый тестправильный ответ
  4. Нет, если тесты идут в одном потоке и экземпляр переиспользуется

Разбор

Режим по умолчанию Lifecycle.PER_METHOD: каждый тест получает свежий экземпляр, поэтому поля не делятся. Общий экземпляр будет только с @TestInstance(Lifecycle.PER_CLASS). Общим может стать только static-поле, тогда и появится зависимость от порядка.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме