Java: Автоматическое тестирование
2026-02-26 20:33 Diff

Представьте себе метод, который принимает на вход HTML в виде строки, извлекает из него все ссылки и возвращает их как список:

Кусок HTML в начале теста выглядит страшно. Он большой и состоит из нагромождения тегов. Конечно, можно постараться и отформатировать его, но это будет ручная работа. Для любого редактора это просто строка. Но дело не только в форматировании, у такого способа работы с большими кусками данных есть и другие недостатки:

  • При обновлениях очень легко допустить ошибку, которую сложно обнаружить визуально. Редактор ничем не сможет помочь.
  • Чем больше таких данных в тестах, тем сложнее их читать и отделять логику от самих данных.

Было бы гораздо удобнее, если бы HTML хранился как обычный HTML в своём собственном файле. Это несложно сделать. В таком случае тест будет выглядеть так:

Данные, которые нужны во время запуска тестов, называются фикстурами. Это не обязательно текстовые данные. Фикстурами могут быть картинки, JSON и XML-файлы, записи в базе данных и многое другое. Иногда частью фикстур может быть и код, но это довольно редкая ситуация. Подобные фикстуры нужны при тестировании различных анализаторов кода, таких как Checkstyle.

Обычно фикстуры хранятся в отдельных файлах в своей директории в ресурсах. Например, можно создать директорию fixtures внутри src/test/resources. Затем они читаются и по необходимости используются в тестах.

Воображаемый пример:

Когда фикстур больше одной, то в коде тестов начинает появляться много похожих вызовов, считывающих файлы:

В таком случае лучше вынести построение пути и чтение файла в отдельные методы, а заодно воспользоваться правильным способом склеивания путей:

Само чтение файлов нужно выполнять либо внутри тестов, либо внутри хуков, например @BeforeAll или @BeforeEach. Так JUnit сможет контролировать происходящие процессы