This is an automated email from the ASF dual-hosted git repository.
Jackie-Jiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pinot.git
The following commit(s) were added to refs/heads/master by this push:
new c85b9c26843 Disallow JUnit test APIs in tests and drop the unused
JUnit artifacts (#19675)
c85b9c26843 is described below
commit c85b9c268434a5568c05297aa1c3b265a6274afc
Author: Xiaotian (Jackie) Jiang <[email protected]>
AuthorDate: Sat Sep 26 00:21:00 2026 -0700
Disallow JUnit test APIs in tests and drop the unused JUnit artifacts
(#19675)
---
config/checkstyle.xml | 5 +-
kb/skills/review-testing.md | 3 +-
pinot-common/pom.xml | 16 +-
.../pinot/common/utils/NativeTestNGSuiteTest.java | 230 ---------------------
.../pinot/common/utils/OrderedTestNGSuiteTest.java | 86 ++++++++
pinot-connectors/pinot-flink-connector/pom.xml | 1 +
pinot-controller/pom.xml | 1 +
pinot-integration-test-base/pom.xml | 1 +
pinot-integration-tests/pom.xml | 12 +-
.../pinot-stream-ingestion/pinot-kafka-3.0/pom.xml | 1 +
pom.xml | 76 +++----
11 files changed, 137 insertions(+), 295 deletions(-)
diff --git a/config/checkstyle.xml b/config/checkstyle.xml
index f7beae7967f..e671f2a3c41 100644
--- a/config/checkstyle.xml
+++ b/config/checkstyle.xml
@@ -193,12 +193,13 @@
<module name="IllegalImport">
<property name="illegalClasses" value="com.google.common.io.Files"/>
</module>
- <!-- Use org.testng.Assert in tests -->
+ <!-- Tests are written with TestNG (org.testng.Assert). JUnit test APIs
are banned; only the JUnit Platform
+ (org.junit.platform), which Surefire uses to run the TestNG suites,
is allowed -->
<module name="IllegalImport">
<property name="regexp" value="true"/>
<property name="illegalClasses"
value="org\.testng\.AssertJUnit.*,
- org\.junit\.Assert.*,
+ org\.junit\.(?!platform\.).*,
org\.apache\.logging\.log4j\.core\.util\.Assert.*,
org\.locationtech\.jts\.util\.Assert.*"/>
</module>
diff --git a/kb/skills/review-testing.md b/kb/skills/review-testing.md
index fd73eff230c..7f69d65f8a3 100644
--- a/kb/skills/review-testing.md
+++ b/kb/skills/review-testing.md
@@ -11,7 +11,8 @@ impact; pattern matches are investigation triggers, not
findings or automatic se
- Map changed behavior to existing and new tests. A production-file change
without a test-file change is not itself a
coverage gap; identify the behavior or failure mode that lacks coverage.
- Find new tests and scan for:
- - Test framework: TestNG (`import org.testng.annotations.Test`) unless the
file uses JUnit consistently.
+ - Test framework: TestNG (`import org.testng.annotations.Test`); JUnit test
APIs are not allowed. Only the JUnit
+ Platform suite API (`org.junit.platform.suite.api`) is used, to group
TestNG tests.
- Mocks: inspect whether mocks of `Dictionary`, `ForwardIndexReader`, or
`NullValueVectorReader` omit semantics needed
by the assertion. Prefer real instances when encoding or storage behavior
matters (see PR 18189).
- `assertTrue` / `assertFalse` on compound expressions — prefer
`assertEquals` / `assertThrows`.
diff --git a/pinot-common/pom.xml b/pinot-common/pom.xml
index bcd233c5698..050a315bec7 100644
--- a/pinot-common/pom.xml
+++ b/pinot-common/pom.xml
@@ -366,26 +366,12 @@
<artifactId>assertj-core</artifactId>
<scope>test</scope>
</dependency>
- <dependency>
- <groupId>org.junit.jupiter</groupId>
- <artifactId>junit-jupiter-api</artifactId>
- <scope>test</scope>
- </dependency>
+ <!-- Suite API used by OrderedTestNGSuite (and its test) to read the
declared class order -->
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-suite</artifactId>
<scope>test</scope>
</dependency>
- <dependency>
- <groupId>org.junit.platform</groupId>
- <artifactId>junit-platform-launcher</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.junit.support</groupId>
- <artifactId>testng-engine</artifactId>
- <scope>test</scope>
- </dependency>
</dependencies>
<profiles>
<profile>
diff --git
a/pinot-common/src/test/java/org/apache/pinot/common/utils/NativeTestNGSuiteTest.java
b/pinot-common/src/test/java/org/apache/pinot/common/utils/NativeTestNGSuiteTest.java
deleted file mode 100644
index 7e1b756fd4b..00000000000
---
a/pinot-common/src/test/java/org/apache/pinot/common/utils/NativeTestNGSuiteTest.java
+++ /dev/null
@@ -1,230 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.pinot.common.utils;
-
-import java.util.ArrayList;
-import java.util.List;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-import org.junit.platform.launcher.core.LauncherDiscoveryRequestBuilder;
-import org.junit.platform.launcher.core.LauncherFactory;
-import org.junit.platform.launcher.listeners.SummaryGeneratingListener;
-import org.junit.platform.launcher.listeners.TestExecutionSummary;
-import org.junit.platform.suite.api.ConfigurationParameter;
-import org.junit.platform.suite.api.IncludeEngines;
-import org.junit.platform.suite.api.SelectClasses;
-import org.junit.platform.suite.api.SelectMethod;
-import org.junit.platform.suite.api.Suite;
-import org.testng.annotations.AfterSuite;
-import org.testng.annotations.BeforeSuite;
-import org.testng.annotations.DataProvider;
-
-import static
org.junit.platform.engine.discovery.DiscoverySelectors.selectClass;
-import static org.junit.platform.launcher.EngineFilter.includeEngines;
-import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertTrue;
-import static org.testng.Assert.fail;
-
-
-/// Verifies the native JUnit Platform suites used to group TestNG tests
without XML suite files.
-/// Not thread-safe: the fixtures share lifecycle events and must execute
sequentially.
-public class NativeTestNGSuiteTest {
- private static final List<String> EVENTS = new ArrayList<>();
-
- @BeforeEach
- public void resetEvents() {
- EVENTS.clear();
- }
-
- @Test
- public void testSharedLifecycleAndClassOrder() {
- TestExecutionSummary summary = execute(SharedSuite.class);
- assertEquals(summary.getTotalFailureCount(), 0L,
summary.getFailures().toString());
- assertEquals(summary.getTestsSucceededCount(), 4L);
- assertEquals(EVENTS, List.of("start", "first", "second", "third", "last",
"finish"));
- }
-
- @Test
- public void testReversedClassOrder() {
- TestExecutionSummary summary = execute(ReversedSuite.class);
- assertEquals(summary.getTotalFailureCount(), 0L,
summary.getFailures().toString());
- assertEquals(summary.getTestsSucceededCount(), 4L);
- assertEquals(EVENTS, List.of("start", "last", "third", "second", "first",
"finish"));
- }
-
- @Test
- public void testExcludedGroups() {
- TestExecutionSummary summary = execute(StatefulSuite.class);
- assertEquals(summary.getTotalFailureCount(), 0L,
summary.getFailures().toString());
- assertEquals(summary.getTestsSucceededCount(), 1L);
- assertEquals(EVENTS, List.of("start", "stateful", "finish"));
- }
-
- @Test
- public void testIncludedGroupsAndRepeatedDataProviderInvocations() {
- TestExecutionSummary summary = execute(StatelessSuite.class);
- assertEquals(summary.getTotalFailureCount(), 0L,
summary.getFailures().toString());
- assertEquals(summary.getTestsSucceededCount(), 4L);
- assertEquals(EVENTS, List.of("start", "data-1", "data-2", "data-1",
"data-2", "finish"));
- }
-
- @Test
- public void testMethodSelection() {
- TestExecutionSummary summary = execute(MethodSuite.class);
- assertEquals(summary.getTotalFailureCount(), 0L,
summary.getFailures().toString());
- assertEquals(summary.getTestsSucceededCount(), 1L);
- assertEquals(EVENTS, List.of("start", "stateful", "finish"));
- }
-
- @Test
- public void testFailurePropagationAndTeardown() {
- TestExecutionSummary summary = execute(FailingSuite.class);
- assertEquals(summary.getTestsFailedCount(), 1L);
- assertEquals(summary.getTotalFailureCount(), 1L);
-
assertTrue(summary.getFailures().get(0).getException().getMessage().contains("expected
fixture failure"));
- assertEquals(EVENTS, List.of("start", "finish"));
- }
-
- private static TestExecutionSummary execute(Class<?> suite) {
- SummaryGeneratingListener listener = new SummaryGeneratingListener();
- LauncherFactory.create().execute(LauncherDiscoveryRequestBuilder.request()
-
.selectors(selectClass(suite)).filters(includeEngines("junit-platform-suite")).build(),
listener);
- return listener.getSummary();
- }
-
- /// Stateless suite declaration that preserves the shared lifecycle and
class order.
- @Suite
- @IncludeEngines("testng")
- @SelectClasses({ZFirstFixture.class, ASecondFixture.class,
MThirdFixture.class, BLastFixture.class})
- @ConfigurationParameter(key = "testng.listeners",
- value =
"org.apache.pinot.common.utils.NativeTestNGSuiteTest$SharedSuite")
- public static class SharedSuite extends OrderedTestNGSuite {
- }
-
- /// Reverses the same four fixtures so incidental HashSet iteration cannot
satisfy both order assertions.
- @Suite
- @IncludeEngines("testng")
- @SelectClasses({BLastFixture.class, MThirdFixture.class,
ASecondFixture.class, ZFirstFixture.class})
- @ConfigurationParameter(key = "testng.listeners",
- value =
"org.apache.pinot.common.utils.NativeTestNGSuiteTest$ReversedSuite")
- public static class ReversedSuite extends OrderedTestNGSuite {
- }
-
- /// Stateless suite declaration excluding the stateless group.
- @Suite
- @IncludeEngines("testng")
- @SelectClasses(GroupedFixture.class)
- @ConfigurationParameter(key = "testng.excludedGroups", value = "stateless")
- public static class StatefulSuite {
- }
-
- /// Stateless suite declaration including only the stateless group.
- @Suite
- @IncludeEngines("testng")
- @SelectClasses(GroupedFixture.class)
- @ConfigurationParameter(key = "testng.groups", value = "stateless")
- public static class StatelessSuite {
- }
-
- /// Stateless suite declaration selecting one method from a class.
- @Suite
- @IncludeEngines("testng")
- @SelectMethod(type = GroupedFixture.class, name = "stateful")
- public static class MethodSuite {
- }
-
- /// Stateless suite declaration containing an intentional failure.
- @Suite
- @IncludeEngines("testng")
- @SelectClasses(FailingFixture.class)
- public static class FailingSuite {
- }
-
- /// Shared lifecycle fixture; accesses the enclosing test's sequential event
log.
- public static class SharedFixture {
- @BeforeSuite(alwaysRun = true)
- public void start() {
- assertTrue(EVENTS.isEmpty(), "Suite setup must run exactly once");
- EVENTS.add("start");
- }
-
- @AfterSuite(alwaysRun = true)
- public void finish() {
- EVENTS.add("finish");
- }
- }
-
- /// First sequential fixture sharing its suite's lifecycle.
- public static class ZFirstFixture extends SharedFixture {
- @org.testng.annotations.Test
- public void first() {
- EVENTS.add("first");
- }
- }
-
- /// Second sequential fixture sharing its suite's lifecycle.
- public static class ASecondFixture extends SharedFixture {
- @org.testng.annotations.Test
- public void second() {
- EVENTS.add("second");
- }
- }
-
- /// Sequential fixture verifying a third nonalphabetical class selection.
- public static class MThirdFixture extends SharedFixture {
- @org.testng.annotations.Test
- public void third() {
- EVENTS.add("third");
- }
- }
-
- /// Sequential fixture that must execute last, like the Kafka shutdown
scenario.
- public static class BLastFixture extends SharedFixture {
- @org.testng.annotations.Test
- public void last() {
- EVENTS.add("last");
- }
- }
-
- /// Sequential fixture with distinct groups and repeated parameterized
invocations.
- public static class GroupedFixture extends SharedFixture {
- @org.testng.annotations.Test
- public void stateful() {
- EVENTS.add("stateful");
- }
-
- @org.testng.annotations.Test(groups = "stateless", dataProvider =
"values", invocationCount = 2)
- public void stateless(int value) {
- EVENTS.add("data-" + value);
- }
-
- @DataProvider
- public Object[][] values() {
- return new Object[][]{{1}, {2}};
- }
- }
-
- /// Sequential fixture verifying that native test failures reach the
platform launcher.
- public static class FailingFixture extends SharedFixture {
- @org.testng.annotations.Test
- public void failure() {
- fail("expected fixture failure");
- }
- }
-}
diff --git
a/pinot-common/src/test/java/org/apache/pinot/common/utils/OrderedTestNGSuiteTest.java
b/pinot-common/src/test/java/org/apache/pinot/common/utils/OrderedTestNGSuiteTest.java
new file mode 100644
index 00000000000..caf0ca8df5d
--- /dev/null
+++
b/pinot-common/src/test/java/org/apache/pinot/common/utils/OrderedTestNGSuiteTest.java
@@ -0,0 +1,86 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.pinot.common.utils;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.junit.platform.suite.api.SelectClasses;
+import org.testng.annotations.Test;
+import org.testng.xml.XmlClass;
+import org.testng.xml.XmlSuite;
+import org.testng.xml.XmlTest;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertTrue;
+
+
+/// Verifies that [OrderedTestNGSuite] restores the class order declared with
`@SelectClasses` on the suite.
+public class OrderedTestNGSuiteTest {
+
+ @Test
+ public void testRestoresDeclaredClassOrder() {
+ XmlTest xmlTest = xmlTest(Third.class, First.class, Second.class);
+ new DeclaredOrderSuite().alter(List.of(xmlTest.getSuite()));
+ assertOrder(xmlTest, First.class, Second.class, Third.class);
+ }
+
+ @Test
+ public void testFollowsTheAnnotationRatherThanClassNames() {
+ XmlTest xmlTest = xmlTest(First.class, Second.class, Third.class);
+ new ReversedOrderSuite().alter(List.of(xmlTest.getSuite()));
+ assertOrder(xmlTest, Third.class, Second.class, First.class);
+ }
+
+ private static XmlTest xmlTest(Class<?>... classes) {
+ XmlTest xmlTest = new XmlTest(new XmlSuite());
+ List<XmlClass> xmlClasses = new ArrayList<>();
+ for (Class<?> clazz : classes) {
+ xmlClasses.add(new XmlClass(clazz));
+ }
+ xmlTest.setXmlClasses(xmlClasses);
+ return xmlTest;
+ }
+
+ private static void assertOrder(XmlTest xmlTest, Class<?>... expected) {
+ List<XmlClass> xmlClasses = xmlTest.getXmlClasses();
+ assertEquals(xmlClasses.size(), expected.length);
+ for (int i = 0; i < expected.length; i++) {
+ assertEquals(xmlClasses.get(i).getSupportClass(), expected[i]);
+ assertEquals(xmlClasses.get(i).getIndex(), i);
+ }
+ assertTrue(xmlTest.getPreserveOrder());
+ }
+
+ @SelectClasses({First.class, Second.class, Third.class})
+ private static class DeclaredOrderSuite extends OrderedTestNGSuite {
+ }
+
+ @SelectClasses({Third.class, Second.class, First.class})
+ private static class ReversedOrderSuite extends OrderedTestNGSuite {
+ }
+
+ private static class First {
+ }
+
+ private static class Second {
+ }
+
+ private static class Third {
+ }
+}
diff --git a/pinot-connectors/pinot-flink-connector/pom.xml
b/pinot-connectors/pinot-flink-connector/pom.xml
index c6c8bed05cd..b16cc4364bb 100644
--- a/pinot-connectors/pinot-flink-connector/pom.xml
+++ b/pinot-connectors/pinot-flink-connector/pom.xml
@@ -103,6 +103,7 @@
<classifier>test</classifier>
<scope>test</scope>
</dependency>
+ <!-- Runtime dependency of the embedded Kafka broker
(EmbeddedKafkaCluster); not a test framework -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
diff --git a/pinot-controller/pom.xml b/pinot-controller/pom.xml
index 63047319a25..48540b370a1 100644
--- a/pinot-controller/pom.xml
+++ b/pinot-controller/pom.xml
@@ -108,6 +108,7 @@
<artifactId>mockito-core</artifactId>
<scope>test</scope>
</dependency>
+ <!-- @Suite classes under suites/ that split the controller tests into the
stateful and stateless runs -->
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-suite</artifactId>
diff --git a/pinot-integration-test-base/pom.xml
b/pinot-integration-test-base/pom.xml
index dd8b9372ebd..47c6db88295 100644
--- a/pinot-integration-test-base/pom.xml
+++ b/pinot-integration-test-base/pom.xml
@@ -120,6 +120,7 @@
<classifier>test</classifier>
<scope>test</scope>
</dependency>
+ <!-- Runtime dependency of the embedded Kafka broker
(EmbeddedKafkaCluster); not a test framework -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
diff --git a/pinot-integration-tests/pom.xml b/pinot-integration-tests/pom.xml
index 18a6d351fe5..a08cf92bf55 100644
--- a/pinot-integration-tests/pom.xml
+++ b/pinot-integration-tests/pom.xml
@@ -549,11 +549,6 @@
<classifier>test</classifier>
<scope>test</scope>
</dependency>
- <dependency>
- <groupId>org.junit.jupiter</groupId>
- <artifactId>junit-jupiter-api</artifactId>
- <scope>test</scope>
- </dependency>
<dependency>
<groupId>org.apache.pinot</groupId>
<artifactId>pinot-udf-test</artifactId>
@@ -626,6 +621,13 @@
<artifactId>pinot-batch-ingestion-spark-3</artifactId>
<scope>test</scope>
</dependency>
+ <!-- Runtime dependency of the embedded Kafka broker
(EmbeddedKafkaCluster); not a test framework -->
+ <dependency>
+ <groupId>org.junit.jupiter</groupId>
+ <artifactId>junit-jupiter-api</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <!-- @Suite classes under suites/ that run the shared-cluster integration
suites in one fork -->
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-suite</artifactId>
diff --git a/pinot-plugins/pinot-stream-ingestion/pinot-kafka-3.0/pom.xml
b/pinot-plugins/pinot-stream-ingestion/pinot-kafka-3.0/pom.xml
index 9fed722e622..9ad09b15ce1 100644
--- a/pinot-plugins/pinot-stream-ingestion/pinot-kafka-3.0/pom.xml
+++ b/pinot-plugins/pinot-stream-ingestion/pinot-kafka-3.0/pom.xml
@@ -100,6 +100,7 @@
<classifier>test</classifier>
<scope>test</scope>
</dependency>
+ <!-- Runtime dependency of Kafka's KafkaClusterTestKit, which
EmbeddedKafkaCluster starts; not a test framework -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
diff --git a/pom.xml b/pom.xml
index e5b3311b58b..a8a5bd01f40 100644
--- a/pom.xml
+++ b/pom.xml
@@ -358,7 +358,6 @@
<!-- Test Libraries -->
<testng.version>7.12.0</testng.version>
<junit.version>6.1.3</junit.version>
- <testng-engine.version>1.1.0</testng-engine.version>
<mockito-core.version>5.23.0</mockito-core.version>
<equalsverifier.version>3.19.4</equalsverifier.version>
<testcontainers.version>2.0.5</testcontainers.version>
@@ -2033,39 +2032,12 @@
<version>${testng.version}</version>
<scope>test</scope>
</dependency>
-
- <dependency>
- <groupId>org.junit.jupiter</groupId>
- <artifactId>junit-jupiter-api</artifactId>
- <version>${junit.version}</version>
- <scope>test</scope>
- </dependency>
-
- <!-- mockito bom -->
- <dependency>
- <groupId>org.mockito</groupId>
- <artifactId>mockito-bom</artifactId>
- <version>${mockito-core.version}</version>
- <type>pom</type>
- <scope>import</scope>
- </dependency>
-
<dependency>
<groupId>nl.jqno.equalsverifier</groupId>
<artifactId>equalsverifier</artifactId>
<version>${equalsverifier.version}</version>
<scope>test</scope>
</dependency>
-
- <!-- testcontainers bom -->
- <dependency>
- <groupId>org.testcontainers</groupId>
- <artifactId>testcontainers-bom</artifactId>
- <version>${testcontainers.version}</version>
- <type>pom</type>
- <scope>import</scope>
- </dependency>
-
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
@@ -2085,31 +2057,51 @@
<scope>test</scope>
</dependency>
- <!-- assertj bom -->
+ <!-- Tests are written with TestNG only (checkstyle rejects JUnit test
APIs). JUnit is present as test
+ infrastructure: Surefire no longer ships a native TestNG provider
and runs TestNG through the JUnit
+ Platform. -->
+ <!-- Runtime dependency of Kafka's KafkaClusterTestKit, the embedded
broker behind EmbeddedKafkaCluster: its
+ readiness wait asserts through JUnit. Declared by the modules that
start the broker. -->
<dependency>
- <groupId>org.assertj</groupId>
- <artifactId>assertj-bom</artifactId>
- <version>${assertj.version}</version>
- <type>pom</type>
- <scope>import</scope>
+ <groupId>org.junit.jupiter</groupId>
+ <artifactId>junit-jupiter-api</artifactId>
+ <version>${junit.version}</version>
+ <scope>test</scope>
</dependency>
+ <!-- @Suite classes that group TestNG tests into one Surefire fork
(shared @BeforeSuite cluster, class order,
+ TestNG groups) and OrderedTestNGSuite, which restores the declared
class order. -->
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-suite</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
+
+ <!-- mockito bom -->
<dependency>
- <groupId>org.junit.platform</groupId>
- <artifactId>junit-platform-launcher</artifactId>
- <version>${junit.version}</version>
- <scope>test</scope>
+ <groupId>org.mockito</groupId>
+ <artifactId>mockito-bom</artifactId>
+ <version>${mockito-core.version}</version>
+ <type>pom</type>
+ <scope>import</scope>
+ </dependency>
+
+ <!-- testcontainers bom -->
+ <dependency>
+ <groupId>org.testcontainers</groupId>
+ <artifactId>testcontainers-bom</artifactId>
+ <version>${testcontainers.version}</version>
+ <type>pom</type>
+ <scope>import</scope>
</dependency>
+
+ <!-- assertj bom -->
<dependency>
- <groupId>org.junit.support</groupId>
- <artifactId>testng-engine</artifactId>
- <version>${testng-engine.version}</version>
- <scope>test</scope>
+ <groupId>org.assertj</groupId>
+ <artifactId>assertj-bom</artifactId>
+ <version>${assertj.version}</version>
+ <type>pom</type>
+ <scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]