С каким scope подключают JUnit в Maven?

Ответ

JUnit в Maven подключается с областью видимости test. Это стандартная практика, так как библиотека для тестирования требуется только на этапе компиляции и выполнения тестов, но не должна включаться в runtime-зависимости основного кода или финальный артефакт (JAR/WAR).

Пример зависимости в pom.xml для JUnit 5:

<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter-api</artifactId>
    <version>5.9.2</version>
    <scope>test</scope>
</dependency>

Почему test scope?

  • Изоляция зависимостей: Гарантирует, что тестовые библиотеки не попадут в production-сборку.
  • Чистота classpath: Во время компиляции основного кода JUnit недоступен, что предотвращает случайное использование тестовых аннотаций в бизнес-логике.
  • Уменьшение размера артефакта: Исключает ненужные библиотеки из итогового пакета.

Для JUnit 4 (junit:junit) применяется тот же принцип.

Ответ 18+ 🔞

Да ты посмотри, какая история, блядь! JUnit в Maven — это ж классика, как Герасим с Муму, только без утопления, слава богу.

Вот смотри, подключаешь ты его, а область видимости ставишь test. Это, блядь, святое правило, как не серить на крыше. Почему? А потому что эта библиотека — она только для этапа, когда ты тесты пишешь, компилируешь и гоняешь. А в рантайм основного кода или в финальный артефакт (этот твой JAR или WAR) её тащить — это ж чистой воды распиздяйство, ёпта! Это всё равно что на свидание с девчонкой явиться с собакой на поводке и мешком кирпичей — зачем, блядь?

Вот, смотри, как в pom.xml это выглядит для JUnit 5:

<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter-api</artifactId>
    <version>5.9.2</version>
    <scope>test</scope>
</dependency>

А теперь, блядь, почему этот самый test scope?

  • Изоляция, мать её, зависимостей! Чтобы эти тестовые библиотеки, как шпионы, в продакшн-сборку не просочились. Чистота, блядь, должна быть.
  • Classpath, сука, чистый! Когда основной код компилируется, JUnit там и не пахнет. Это чтобы какой-нибудь умник не начал бизнес-методы аннотацией @Test помечать, ядрёна вошь!
  • Размер артефакта, блядь, меньше! Зачем тащить в итоговый пакет всякий хлам, который в работе не нужен? Это ж нерационально, в рот меня чих-пых!

Для JUnit 4, кстати, тот же принцип, хоть он и староват уже. scope="test" и ни шага в сторону, как Герасим с мешком к озеру. Только тут, слава богу, всё заканчивается хорошо — тесты проходят, артефакт чистый, все довольны.