Skip to content

Commit fe467bf

Browse files
committed
⚡️ Run Unit Tests Concurrently
By default, all unit tests run concurrently. We opt-out of this behavior in cases where this is an issue.
1 parent 560dbfc commit fe467bf

File tree

4 files changed

+38
-17
lines changed

4 files changed

+38
-17
lines changed

framework/codemodder-testutils/src/main/java/io/codemodder/testutils/CodemodTestMixin.java

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -68,21 +68,23 @@ default Stream<DynamicTest> generateTestCases(@TempDir final Path tmpDir) throws
6868
.toList();
6969

7070
ThrowingConsumer<Path> testExecutor =
71-
path ->
72-
verifyCodemod(
73-
metadata.codemodType(),
74-
metadata.renameTestFile(),
75-
tmpDir,
76-
testResourceDir,
77-
path,
78-
dependencies,
79-
projectProviders,
80-
metadata.doRetransformTest(),
81-
metadata.expectingFixesAtLines(),
82-
metadata.expectingFailedFixesAtLines(),
83-
metadata.sonarIssuesJsonFiles(),
84-
metadata.sonarHotspotsJsonFiles());
85-
71+
path -> {
72+
// create a new temporary directory for each test case
73+
final var tmp = Files.createTempDirectory(tmpDir, "test-case-");
74+
verifyCodemod(
75+
metadata.codemodType(),
76+
metadata.renameTestFile(),
77+
tmp,
78+
testResourceDir,
79+
path,
80+
dependencies,
81+
projectProviders,
82+
metadata.doRetransformTest(),
83+
metadata.expectingFixesAtLines(),
84+
metadata.expectingFailedFixesAtLines(),
85+
metadata.sonarIssuesJsonFiles(),
86+
metadata.sonarHotspotsJsonFiles());
87+
};
8688
return DynamicTest.stream(inputStream, displayNameGenerator, testExecutor);
8789
}
8890

gradle/build-plugins/src/main/kotlin/io.codemodder.java.gradle.kts

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,19 @@ spotless {
1515
}
1616
}
1717

18-
tasks.withType(Test::class) {
19-
useJUnitPlatform()
18+
testing {
19+
@Suppress("UnstableApiUsage")
20+
suites {
21+
val test by getting(JvmTestSuite::class) {
22+
useJUnitJupiter()
23+
targets {
24+
all {
25+
testTask.configure {
26+
systemProperty("junit.jupiter.execution.parallel.enabled", "true")
27+
systemProperty("junit.jupiter.execution.parallel.mode.default", "concurrent")
28+
}
29+
}
30+
}
31+
}
32+
}
2033
}

plugins/codemodder-plugin-maven/src/test/java/io/codemodder/plugins/maven/MavenProviderTest.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package io.codemodder.plugins.maven;
22

33
import static org.assertj.core.api.Assertions.*;
4+
import static org.junit.jupiter.api.parallel.ExecutionMode.SAME_THREAD;
45
import static org.mockito.ArgumentMatchers.*;
56
import static org.mockito.Mockito.doThrow;
67
import static org.mockito.Mockito.mock;
@@ -20,6 +21,7 @@
2021
import org.junit.jupiter.api.BeforeEach;
2122
import org.junit.jupiter.api.Test;
2223
import org.junit.jupiter.api.io.TempDir;
24+
import org.junit.jupiter.api.parallel.Execution;
2325
import org.junit.jupiter.params.ParameterizedTest;
2426
import org.junit.jupiter.params.provider.Arguments;
2527
import org.junit.jupiter.params.provider.MethodSource;
@@ -28,6 +30,7 @@
2830
* Unit tests for {@link MavenProvider}. We bend over backwards here not to test the pom-operator
2931
* types.
3032
*/
33+
@Execution(SAME_THREAD)
3134
final class MavenProviderTest {
3235

3336
private static class TestPomModifier implements MavenProvider.PomModifier {

plugins/codemodder-plugin-maven/src/test/java/io/codemodder/plugins/maven/operator/RemoteRepositoriesIntegrationTest.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,17 @@
11
package io.codemodder.plugins.maven.operator;
22

33
import static org.assertj.core.api.Assertions.assertThat;
4+
import static org.junit.jupiter.api.parallel.ExecutionMode.SAME_THREAD;
45

56
import java.io.*;
67
import java.util.*;
78
import org.apache.commons.lang3.SystemUtils;
89
import org.junit.jupiter.api.Test;
10+
import org.junit.jupiter.api.parallel.Execution;
911
import org.slf4j.Logger;
1012
import org.slf4j.LoggerFactory;
1113

14+
@Execution(SAME_THREAD)
1215
final class RemoteRepositoriesIntegrationTest {
1316
private static final Logger LOGGER =
1417
LoggerFactory.getLogger(RemoteRepositoriesIntegrationTest.class);

0 commit comments

Comments
 (0)