From 1ea51ad7f1e92471ec86445f6023cd298967a545 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Edd=C3=BA=20Mel=C3=A9ndez?= Date: Wed, 24 Sep 2025 17:20:34 -0600 Subject: [PATCH 1/5] Remove JUnit 4 support Fixes #970 --- core/build.gradle | 1 - .../containers/ComposeContainer.java | 30 +--------- .../containers/DockerComposeContainer.java | 32 +---------- .../FailureDetectingExternalResource.java | 50 ----------------- .../containers/GenericContainer.java | 56 ------------------- .../testcontainers/containers/Network.java | 11 +--- .../containers/ExposedHostTest.java | 7 --- .../FailureDetectingExternalResourceTest.java | 28 ---------- .../junit/DockerComposeLogConsumerTest.java | 5 +- settings.gradle | 2 - 10 files changed, 6 insertions(+), 216 deletions(-) delete mode 100644 core/src/main/java/org/testcontainers/containers/FailureDetectingExternalResource.java delete mode 100644 core/src/test/java/org/testcontainers/containers/FailureDetectingExternalResourceTest.java diff --git a/core/build.gradle b/core/build.gradle index b4eeae7b0c5..d915cc36b4f 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -69,7 +69,6 @@ configurations.all { } dependencies { - api 'junit:junit:4.13.2' api 'org.slf4j:slf4j-api:1.7.36' compileOnly 'org.jetbrains:annotations:26.0.2-1' testCompileOnly 'org.jetbrains:annotations:26.0.2-1' diff --git a/core/src/main/java/org/testcontainers/containers/ComposeContainer.java b/core/src/main/java/org/testcontainers/containers/ComposeContainer.java index 79d706d3b6a..e8061363a18 100644 --- a/core/src/main/java/org/testcontainers/containers/ComposeContainer.java +++ b/core/src/main/java/org/testcontainers/containers/ComposeContainer.java @@ -5,8 +5,6 @@ import lombok.NonNull; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.SystemUtils; -import org.junit.runner.Description; -import org.junit.runners.model.Statement; import org.testcontainers.containers.output.OutputFrame; import org.testcontainers.containers.wait.strategy.Wait; import org.testcontainers.containers.wait.strategy.WaitStrategy; @@ -31,7 +29,7 @@ * It uses either Compose V2 contained within the Docker binary, or a containerised version of Compose V2. */ @Slf4j -public class ComposeContainer extends FailureDetectingExternalResource implements Startable { +public class ComposeContainer implements Startable { private final Map scalingPreferences = new HashMap<>(); @@ -93,32 +91,6 @@ public ComposeContainer(String identifier, List composeFiles) { this.project = this.composeDelegate.getProject(); } - @Override - @Deprecated - public Statement apply(Statement base, Description description) { - return super.apply(base, description); - } - - @Override - @Deprecated - public void starting(Description description) { - start(); - } - - @Override - @Deprecated - protected void succeeded(Description description) {} - - @Override - @Deprecated - protected void failed(Throwable e, Description description) {} - - @Override - @Deprecated - public void finished(Description description) { - stop(); - } - @Override public void start() { synchronized (MUTEX) { diff --git a/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java b/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java index 92dc75b6cde..dd06b181b42 100644 --- a/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java +++ b/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java @@ -5,8 +5,6 @@ import lombok.NonNull; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.SystemUtils; -import org.junit.runner.Description; -import org.junit.runners.model.Statement; import org.testcontainers.containers.output.OutputFrame; import org.testcontainers.containers.wait.strategy.Wait; import org.testcontainers.containers.wait.strategy.WaitStrategy; @@ -30,9 +28,7 @@ * Container which launches Docker Compose, for the purposes of launching a defined set of containers. */ @Slf4j -public class DockerComposeContainer> - extends FailureDetectingExternalResource - implements Startable { +public class DockerComposeContainer> implements Startable { private final Map scalingPreferences = new HashMap<>(); @@ -99,32 +95,6 @@ public DockerComposeContainer(String identifier, List composeFiles) { this.project = this.composeDelegate.getProject(); } - @Override - @Deprecated - public Statement apply(Statement base, Description description) { - return super.apply(base, description); - } - - @Override - @Deprecated - public void starting(Description description) { - start(); - } - - @Override - @Deprecated - protected void succeeded(Description description) {} - - @Override - @Deprecated - protected void failed(Throwable e, Description description) {} - - @Override - @Deprecated - public void finished(Description description) { - stop(); - } - @Override public void start() { synchronized (MUTEX) { diff --git a/core/src/main/java/org/testcontainers/containers/FailureDetectingExternalResource.java b/core/src/main/java/org/testcontainers/containers/FailureDetectingExternalResource.java deleted file mode 100644 index 71344267d32..00000000000 --- a/core/src/main/java/org/testcontainers/containers/FailureDetectingExternalResource.java +++ /dev/null @@ -1,50 +0,0 @@ -package org.testcontainers.containers; - -import org.junit.rules.TestRule; -import org.junit.runner.Description; -import org.junit.runners.model.MultipleFailureException; -import org.junit.runners.model.Statement; - -import java.util.ArrayList; -import java.util.List; - -/** - * {@link TestRule} which is called before and after each test, and also is notified on success/failure. - * - * This mimics the behaviour of TestWatcher to some degree, but failures occurring in this rule do not - * contribute to the overall failure count (which can otherwise cause strange negative test success - * figures). - */ -public class FailureDetectingExternalResource implements TestRule { - - @Override - public Statement apply(Statement base, Description description) { - return new Statement() { - @Override - public void evaluate() throws Throwable { - List errors = new ArrayList(); - - try { - starting(description); - base.evaluate(); - succeeded(description); - } catch (Throwable e) { - errors.add(e); - failed(e, description); - } finally { - finished(description); - } - - MultipleFailureException.assertEmpty(errors); - } - }; - } - - protected void starting(Description description) {} - - protected void succeeded(Description description) {} - - protected void failed(Throwable e, Description description) {} - - protected void finished(Description description) {} -} diff --git a/core/src/main/java/org/testcontainers/containers/GenericContainer.java b/core/src/main/java/org/testcontainers/containers/GenericContainer.java index acd70f69cab..0fe944433ae 100644 --- a/core/src/main/java/org/testcontainers/containers/GenericContainer.java +++ b/core/src/main/java/org/testcontainers/containers/GenericContainer.java @@ -32,8 +32,6 @@ import org.apache.commons.lang3.SystemUtils; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.junit.runner.Description; -import org.junit.runners.model.Statement; import org.rnorth.ducttape.unreliables.Unreliables; import org.slf4j.Logger; import org.testcontainers.DockerClientFactory; @@ -52,8 +50,6 @@ import org.testcontainers.images.builder.Transferable; import org.testcontainers.lifecycle.Startable; import org.testcontainers.lifecycle.Startables; -import org.testcontainers.lifecycle.TestDescription; -import org.testcontainers.lifecycle.TestLifecycleAware; import org.testcontainers.utility.Base58; import org.testcontainers.utility.CommandLine; import org.testcontainers.utility.DockerImageName; @@ -106,7 +102,6 @@ */ @Data public class GenericContainer> - extends FailureDetectingExternalResource implements Container, AutoCloseable, WaitStrategyTarget, Startable { public static final int CONTAINER_RUNNING_TIMEOUT_SEC = 30; @@ -1053,57 +1048,6 @@ public void addExposedPorts(int... ports) { this.containerDef.addExposedTcpPorts(ports); } - private TestDescription toDescription(Description description) { - return new TestDescription() { - @Override - public String getTestId() { - return description.getDisplayName(); - } - - @Override - public String getFilesystemFriendlyName() { - return description.getClassName() + "-" + description.getMethodName(); - } - }; - } - - @Override - @Deprecated - public Statement apply(Statement base, Description description) { - return super.apply(base, description); - } - - @Override - @Deprecated - protected void starting(Description description) { - if (this instanceof TestLifecycleAware) { - ((TestLifecycleAware) this).beforeTest(toDescription(description)); - } - this.start(); - } - - @Override - @Deprecated - protected void succeeded(Description description) { - if (this instanceof TestLifecycleAware) { - ((TestLifecycleAware) this).afterTest(toDescription(description), Optional.empty()); - } - } - - @Override - @Deprecated - protected void failed(Throwable e, Description description) { - if (this instanceof TestLifecycleAware) { - ((TestLifecycleAware) this).afterTest(toDescription(description), Optional.of(e)); - } - } - - @Override - @Deprecated - protected void finished(Description description) { - this.stop(); - } - /** * {@inheritDoc} */ diff --git a/core/src/main/java/org/testcontainers/containers/Network.java b/core/src/main/java/org/testcontainers/containers/Network.java index 88ddd6dd906..27cab80c652 100644 --- a/core/src/main/java/org/testcontainers/containers/Network.java +++ b/core/src/main/java/org/testcontainers/containers/Network.java @@ -4,8 +4,6 @@ import lombok.Builder; import lombok.Getter; import lombok.Singular; -import org.junit.rules.ExternalResource; -import org.junit.rules.TestRule; import org.testcontainers.DockerClientFactory; import org.testcontainers.utility.ResourceReaper; @@ -17,7 +15,7 @@ import java.util.concurrent.atomic.AtomicBoolean; import java.util.function.Consumer; -public interface Network extends AutoCloseable, TestRule { +public interface Network extends AutoCloseable { Network SHARED = new NetworkImpl(false, null, Collections.emptySet(), null) { @Override public void close() { @@ -40,7 +38,7 @@ static NetworkImpl.NetworkImplBuilder builder() { @Builder @Getter - class NetworkImpl extends ExternalResource implements Network { + class NetworkImpl implements Network { private final String name = UUID.randomUUID().toString(); @@ -100,11 +98,6 @@ private String create() { return createNetworkCmd.exec().getId(); } - @Override - protected void after() { - close(); - } - @Override public synchronized void close() { if (initialized.getAndSet(false)) { diff --git a/core/src/test/java/org/testcontainers/containers/ExposedHostTest.java b/core/src/test/java/org/testcontainers/containers/ExposedHostTest.java index 39c986d1f8a..50bd17d0f0d 100644 --- a/core/src/test/java/org/testcontainers/containers/ExposedHostTest.java +++ b/core/src/test/java/org/testcontainers/containers/ExposedHostTest.java @@ -7,8 +7,6 @@ import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; -import org.junit.runner.Description; -import org.junit.runners.model.Statement; import org.testcontainers.DockerClientFactory; import org.testcontainers.TestImages; import org.testcontainers.Testcontainers; @@ -189,11 +187,6 @@ public String getId() { @Override public void close() {} - - @Override - public Statement apply(Statement base, Description description) { - return null; - } }; List networks = DockerClientFactory diff --git a/core/src/test/java/org/testcontainers/containers/FailureDetectingExternalResourceTest.java b/core/src/test/java/org/testcontainers/containers/FailureDetectingExternalResourceTest.java deleted file mode 100644 index b2abf02bce5..00000000000 --- a/core/src/test/java/org/testcontainers/containers/FailureDetectingExternalResourceTest.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.testcontainers.containers; - -import org.junit.jupiter.api.Test; -import org.junit.runner.Description; -import org.junit.runners.model.Statement; - -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.doThrow; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.verify; - -class FailureDetectingExternalResourceTest { - - @Test - void finishedIsCalledForCleanupIfStartingThrows() { - FailureDetectingExternalResource res = spy(FailureDetectingExternalResource.class); - Statement stmt = res.apply(mock(Statement.class), Description.EMPTY); - doThrow(new RuntimeException()).when(res).starting(any()); - try { - stmt.evaluate(); - } catch (Throwable t) { - // ignore - } - verify(res).starting(any()); - verify(res).finished(any()); - } -} diff --git a/core/src/test/java/org/testcontainers/junit/DockerComposeLogConsumerTest.java b/core/src/test/java/org/testcontainers/junit/DockerComposeLogConsumerTest.java index a712fb19664..7b9100d1e35 100644 --- a/core/src/test/java/org/testcontainers/junit/DockerComposeLogConsumerTest.java +++ b/core/src/test/java/org/testcontainers/junit/DockerComposeLogConsumerTest.java @@ -1,7 +1,6 @@ package org.testcontainers.junit; import org.junit.jupiter.api.Test; -import org.junit.runner.Description; import org.testcontainers.containers.DockerComposeContainer; import org.testcontainers.containers.output.OutputFrame.OutputType; import org.testcontainers.containers.output.WaitingConsumer; @@ -22,7 +21,7 @@ void testLogConsumer() throws TimeoutException { .withLogConsumer("redis_1", logConsumer); try { - environment.starting(Description.EMPTY); + environment.start(); logConsumer.waitUntil( frame -> { return ( @@ -34,7 +33,7 @@ void testLogConsumer() throws TimeoutException { TimeUnit.SECONDS ); } finally { - environment.finished(Description.EMPTY); + environment.stop(); } } } diff --git a/settings.gradle b/settings.gradle index 0d13ebcc3fe..6784ae93160 100644 --- a/settings.gradle +++ b/settings.gradle @@ -27,8 +27,6 @@ file('modules').eachDir { dir -> project(":testcontainers-${dir.name}").projectDir = dir } -include ':docs:examples:junit4:generic' -include ':docs:examples:junit4:redis' include ':docs:examples:junit5:redis' include ':docs:examples:spock:redis' From 7fb8d118b880b53aca3af1b1111ad7608e0c5c41 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Edd=C3=BA=20Mel=C3=A9ndez?= Date: Thu, 25 Sep 2025 16:17:14 -0600 Subject: [PATCH 2/5] Fix build --- core/build.gradle | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/core/build.gradle b/core/build.gradle index d915cc36b4f..1768cb703ff 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -49,13 +49,33 @@ tasks.japicmp { classExcludes = [ "org.testcontainers.utility.RyukResourceReaper", + "org.testcontainers.containers.FailureDetectingExternalResource", + "org.testcontainers.containers.ComposeContainer", + "org.testcontainers.containers.DockerComposeContainer", + "org.testcontainers.containers.GenericContainer" ] methodExcludes = [ "org.testcontainers.containers.Container#getDockerClient()", "org.testcontainers.containers.ContainerState#getDockerClient()", "org.testcontainers.containers.ContainerState#execInContainer(org.testcontainers.containers.ExecConfig)", - "org.testcontainers.containers.ContainerState#execInContainer(java.nio.charset.Charset,org.testcontainers.containers.ExecConfig)" + "org.testcontainers.containers.ContainerState#execInContainer(java.nio.charset.Charset,org.testcontainers.containers.ExecConfig)", + "org.testcontainers.containers.ComposeContainer#apply(org.junit.runners.model.Statement, org.junit.runner.Description)", + "org.testcontainers.containers.ComposeContainer#failed(java.lang.Throwable, org.junit.runner.Description)", + "org.testcontainers.containers.ComposeContainer#finished(org.junit.runner.Description)", + "org.testcontainers.containers.ComposeContainer#starting(org.junit.runner.Description)", + "org.testcontainers.containers.ComposeContainer#succeeded(org.junit.runner.Description)", + "org.testcontainers.containers.DockerComposeContainer#apply(org.junit.runners.model.Statement, org.junit.runner.Description)", + "org.testcontainers.containers.DockerComposeContainer#failed(java.lang.Throwable, org.junit.runner.Description)", + "org.testcontainers.containers.DockerComposeContainer#finished(org.junit.runner.Description)", + "org.testcontainers.containers.DockerComposeContainer#starting(org.junit.runner.Description)", + "org.testcontainers.containers.DockerComposeContainer#succeeded(org.junit.runner.Description)", + "org.testcontainers.containers.GenericContainer#apply(org.junit.runners.model.Statement, org.junit.runner.Description)", + "org.testcontainers.containers.GenericContainer#failed(java.lang.Throwable, org.junit.runner.Description)", + "org.testcontainers.containers.GenericContainer#finished(org.junit.runner.Description)", + "org.testcontainers.containers.GenericContainer#starting(org.junit.runner.Description)", + "org.testcontainers.containers.GenericContainer#succeeded(org.junit.runner.Description)", + 'org.testcontainers.containers.Network$NetworkImpl#after()' ] fieldExcludes = [] From ae1557b73921eb8f1a48a0b2203aa368989ab744 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Edd=C3=BA=20Mel=C3=A9ndez?= Date: Thu, 25 Sep 2025 16:23:19 -0600 Subject: [PATCH 3/5] Fix import --- .../java/org/testcontainers/jdbc/AbstractJDBCDriverTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/jdbc-test/src/main/java/org/testcontainers/jdbc/AbstractJDBCDriverTest.java b/modules/jdbc-test/src/main/java/org/testcontainers/jdbc/AbstractJDBCDriverTest.java index ff844b8988b..95f9d5d1ad4 100644 --- a/modules/jdbc-test/src/main/java/org/testcontainers/jdbc/AbstractJDBCDriverTest.java +++ b/modules/jdbc-test/src/main/java/org/testcontainers/jdbc/AbstractJDBCDriverTest.java @@ -17,7 +17,7 @@ import java.util.EnumSet; import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.Assume.assumeFalse; +import static org.assertj.core.api.Assumptions.assumeThat; @ParameterizedClass @MethodSource("data") @@ -207,7 +207,7 @@ private HikariDataSource verifyCharacterSet(String jdbcUrl) throws SQLException } private void performTestForCustomIniFile(HikariDataSource dataSource) throws SQLException { - assumeFalse(SystemUtils.IS_OS_WINDOWS); + assumeThat(SystemUtils.IS_OS_WINDOWS).isFalse(); Statement statement = dataSource.getConnection().createStatement(); statement.execute("SELECT @@GLOBAL.innodb_max_undo_log_size"); ResultSet resultSet = statement.getResultSet(); From 9d9353f98403779fb2fc85c4e66015be5d38bce5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Edd=C3=BA=20Mel=C3=A9ndez?= Date: Thu, 25 Sep 2025 16:37:34 -0600 Subject: [PATCH 4/5] Fix import --- .../TestLifecycleAwareExceptionCapturingTest.java | 10 +++++----- .../junit/mariadb/SimpleMariaDBTest.java | 3 +-- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/modules/junit-jupiter/src/test/java/org/testcontainers/junit/jupiter/TestLifecycleAwareExceptionCapturingTest.java b/modules/junit-jupiter/src/test/java/org/testcontainers/junit/jupiter/TestLifecycleAwareExceptionCapturingTest.java index b64f2f3c328..a6647aa3e52 100644 --- a/modules/junit-jupiter/src/test/java/org/testcontainers/junit/jupiter/TestLifecycleAwareExceptionCapturingTest.java +++ b/modules/junit-jupiter/src/test/java/org/testcontainers/junit/jupiter/TestLifecycleAwareExceptionCapturingTest.java @@ -1,13 +1,13 @@ package org.testcontainers.junit.jupiter; -import org.junit.AssumptionViolatedException; import org.junit.jupiter.api.MethodOrderer.OrderAnnotation; import org.junit.jupiter.api.Order; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestMethodOrder; +import org.opentest4j.TestAbortedException; import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.Assume.assumeTrue; +import static org.assertj.core.api.Assumptions.assumeThat; // The order of @ExtendsWith and @Testcontainers is crucial in order for the tests @Testcontainers @@ -24,14 +24,14 @@ class TestLifecycleAwareExceptionCapturingTest { void failing_test_should_pass_throwable_to_testContainer() { startedTestContainer = testContainer; // Force an exception that is captured by the test container without failing the test itself - assumeTrue(false); + assumeThat(false).isTrue(); } @Test @Order(2) void should_have_captured_thrownException() { Throwable capturedThrowable = startedTestContainer.getCapturedThrowable(); - assertThat(capturedThrowable).isInstanceOf(AssumptionViolatedException.class); - assertThat(capturedThrowable.getMessage()).isEqualTo("got: , expected: is "); + assertThat(capturedThrowable).isInstanceOf(TestAbortedException.class); + assertThat(capturedThrowable.getMessage()).contains("Expecting value to be true but was false"); } } diff --git a/modules/mariadb/src/test/java/org/testcontainers/junit/mariadb/SimpleMariaDBTest.java b/modules/mariadb/src/test/java/org/testcontainers/junit/mariadb/SimpleMariaDBTest.java index 9b7fab4daaf..4e88c8981eb 100644 --- a/modules/mariadb/src/test/java/org/testcontainers/junit/mariadb/SimpleMariaDBTest.java +++ b/modules/mariadb/src/test/java/org/testcontainers/junit/mariadb/SimpleMariaDBTest.java @@ -19,7 +19,6 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assumptions.assumeThat; -import static org.junit.Assume.assumeFalse; class SimpleMariaDBTest extends AbstractContainerDatabaseTest { @@ -58,7 +57,7 @@ void testSpecificVersion() throws SQLException { @Test void testMariaDBWithCustomIniFile() throws SQLException { - assumeFalse(SystemUtils.IS_OS_WINDOWS); + assumeThat(SystemUtils.IS_OS_WINDOWS).isFalse(); try ( MariaDBContainer mariadbCustomConfig = new MariaDBContainer<>( From abe5bedf115cdb1e480b698ecde691e175a3b71f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Edd=C3=BA=20Mel=C3=A9ndez?= Date: Thu, 25 Sep 2025 16:58:57 -0600 Subject: [PATCH 5/5] Fix import --- .../containers/RecordingFileFactory.java | 10 -------- .../DefaultRecordingFileFactoryTest.java | 23 ++++++++----------- 2 files changed, 10 insertions(+), 23 deletions(-) diff --git a/modules/selenium/src/main/java/org/testcontainers/containers/RecordingFileFactory.java b/modules/selenium/src/main/java/org/testcontainers/containers/RecordingFileFactory.java index 31946dac59e..9f3795f7cb8 100644 --- a/modules/selenium/src/main/java/org/testcontainers/containers/RecordingFileFactory.java +++ b/modules/selenium/src/main/java/org/testcontainers/containers/RecordingFileFactory.java @@ -1,20 +1,10 @@ package org.testcontainers.containers; -import org.junit.runner.Description; import org.testcontainers.containers.VncRecordingContainer.VncRecordingFormat; import java.io.File; public interface RecordingFileFactory { - @Deprecated - default File recordingFileForTest(File vncRecordingDirectory, Description description, boolean succeeded) { - return recordingFileForTest( - vncRecordingDirectory, - description.getTestClass().getSimpleName() + "-" + description.getMethodName(), - succeeded - ); - } - default File recordingFileForTest( File vncRecordingDirectory, String prefix, diff --git a/modules/selenium/src/test/java/org/testcontainers/containers/DefaultRecordingFileFactoryTest.java b/modules/selenium/src/test/java/org/testcontainers/containers/DefaultRecordingFileFactoryTest.java index aa894810930..03540e54b01 100644 --- a/modules/selenium/src/test/java/org/testcontainers/containers/DefaultRecordingFileFactoryTest.java +++ b/modules/selenium/src/test/java/org/testcontainers/containers/DefaultRecordingFileFactoryTest.java @@ -1,10 +1,10 @@ package org.testcontainers.containers; import lombok.Value; -import org.junit.Test; -import org.junit.runner.Description; -import org.junit.runner.RunWith; -import org.junit.runners.Parameterized; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestInfo; +import org.junit.jupiter.params.ParameterizedClass; +import org.junit.jupiter.params.provider.MethodSource; import java.io.File; import java.nio.file.Files; @@ -17,9 +17,10 @@ import static org.assertj.core.api.Assertions.assertThat; -@RunWith(Parameterized.class) +@ParameterizedClass +@MethodSource("data") @Value -public class DefaultRecordingFileFactoryTest { +class DefaultRecordingFileFactoryTest { private static final DateTimeFormatter DATETIME_FORMATTER = DateTimeFormatter.ofPattern("YYYYMMdd-HHmmss"); @@ -31,7 +32,6 @@ public class DefaultRecordingFileFactoryTest { private final boolean success; - @Parameterized.Parameters public static Collection data() { Collection args = new ArrayList<>(); args.add(new Object[] { "testMethod1", "FAILED", Boolean.FALSE }); @@ -40,13 +40,10 @@ public static Collection data() { } @Test - public void recordingFileThatShouldDescribeTheTestResultAtThePresentTime() throws Exception { + public void recordingFileThatShouldDescribeTheTestResultAtThePresentTime(TestInfo testInfo) throws Exception { File vncRecordingDirectory = Files.createTempDirectory("recording").toFile(); - Description description = Description.createTestDescription( - getClass().getCanonicalName(), - methodName, - Test.class - ); + String className = testInfo.getTestClass().orElseThrow(IllegalStateException::new).getSimpleName(); + String description = className + "-" + methodName; File recordingFile = factory.recordingFileForTest(vncRecordingDirectory, description, success);