JUnit Jupiter migration from JUnit 4.x
org.openrewrite.java.testing.junit5.JUnit4to5Migrationorg.openrewrite.recipe:rewrite-testing-frameworksDefinition
Preconditions2
Recipes56
- Migrate System Rules to System Stubs and JUnit Pioneer
- Use
WireMockServerfor aWireMockRuleused as a server - Use wiremock extension
- Change Gradle or Maven dependency
- Change Gradle or Maven dependency
- Upgrade Gradle or Maven dependency versions
- Use JUnit Jupiter
@Disabled - Use JUnit Jupiter
Executable - Remove JUnit 4
@RunWithannotations that do not require an@ExtendsWithreplacement - Upgrade to Cucumber-JVM 7.x
- Remove Maven plugin dependency
- Upgrade Surefire Plugin
- Add Hamcrest JUnit dependency
- Use
MatcherAssert#assertThat(..) - Use
Assertions#assume*(..)and Hamcrest'sMatcherAssume#assume*(..) - Migrate from JUnit 4
@FixedMethodOrderto JUnit 5@TestMethodOrder - Migrate JUnit 4
TestCaseto JUnit Jupiter - Change method name
- JUnit 4
AssertTo JUnit JupiterAssertions - JUnit 4
@Categoryto JUnit Jupiter@Tag - Migrate JUnit 4 assertion failure exceptions to JUnit Jupiter
- Cleanup JUnit imports
- Use JUnit Jupiter
@TempDir - Make
@TempDirfields non final - JUnit TestName @Rule to JUnit Jupiter TestInfo
- Migrate JUnit 4 lifecycle annotations to JUnit Jupiter
- Migrate JUnit 4
@Testannotations to JUnit 5 - JUnit 4
@Rule Timeoutto JUnit Jupiter'sTimeout - Add missing
@BeforeEach,@AfterEach,@Testto overriding methods - JUnit 4
@RunWith(Parameterized.class)to JUnit Jupiter parameterized tests - Pragmatists
@RunWith(JUnitParamsRunner.class)to JUnit Jupiter@Parameterizedtests - JUnit 4
ExpectedExceptionTo JUnit Jupiter'sassertThrows() - OkHttp 3.x
MockWebServer@RuleTo 4.xMockWebServer - Use Vert.x JUnit 5 Extension
- JUnit 4
@RunWith(Enclosed.class)to JUnit Jupiter@Nested - Use OkHttp 3 MockWebServer for JUnit 5
- Use Mockito JUnit Jupiter extension
- Add
org.hamcrest:hamcrestif it is used - Use XMLUnit Legacy for JUnit 5
- Remove a Gradle or Maven dependency
- Remove Maven managed dependency
- Exclude JUnit 4, unless a test library requires it
- Remove a Gradle or Maven dependency
- Remove Maven managed dependency
- Exclude Maven dependency
- Add JUnit Jupiter dependencies
- Add Gradle or Maven dependency
- Upgrade Maven plugin version
- Upgrade Maven plugin version
- Gradle
Testuse JUnit Jupiter - Change type
- Use Arquillian JUnit 5 Extension
- Use Byteman JUnit 5 dependency
- Migrate rider-spring (JUnit4) to rider-junit5 (JUnit5)
- AssertJ
@Rulesoft assertions toSoftAssertionsExtension - Handle the usage of ExternalResourceRule fields using @ExtendWith(ExternalResourceSupport.class)
Examples
java
- java
- Diff
import org.junit.Test;
import org.junit.experimental.runners.Enclosed;
import org.junit.runner.RunWith;
@RunWith(Enclosed.class)
public class RootTest {
public static class InnerTest {
@Test
public void test() {
}
}
}
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
public class RootTest {
@Nested
public class InnerTest {
@Test
public void test() {
}
}
}
@@ -1,3 +1,2 @@
-import org.junit.Test;
-import org.junit.experimental.runners.Enclosed;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.Nested;
+import org.junit.jupiter.api.Test;
@@ -5,1 +4,0 @@
import org.junit.runner.RunWith;
-@RunWith(Enclosed.class)
public class RootTest {
@@ -7,1 +5,2 @@
@RunWith(Enclosed.class)
public class RootTest {
- public static class InnerTest {
+ @Nested
+ public class InnerTest {
@Test
java
- java
- Diff
import org.junit.Assert;
import org.junit.Test;
import static java.util.Arrays.asList;
import static org.hamcrest.Matchers.containsInAnyOrder;
public class SampleTest {
@SuppressWarnings("ALL")
@Test
public void filterShouldRemoveUnusedConfig() {
Assert.assertThat(asList("1", "2", "3"),
containsInAnyOrder("3", "2", "1"));
}
}
import org.junit.jupiter.api.Test;
import static java.util.Arrays.asList;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.containsInAnyOrder;
public class SampleTest {
@SuppressWarnings("ALL")
@Test
public void filterShouldRemoveUnusedConfig() {
assertThat(asList("1", "2", "3"),
containsInAnyOrder("3", "2", "1"));
}
}
@@ -1,2 +1,1 @@
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
@@ -5,0 +4,1 @@
import static java.util.Arrays.asList;
+import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.containsInAnyOrder;
@@ -11,1 +11,1 @@
@Test
public void filterShouldRemoveUnusedConfig() {
- Assert.assertThat(asList("1", "2", "3"),
+ assertThat(asList("1", "2", "3"),
containsInAnyOrder("3", "2", "1"));
java
- java
- Diff
package org.openrewrite.java.testing.junit5;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import java.util.List;
import static org.mockito.Mockito.verify;
public class MockitoTests {
@Mock
List<String> mockedList;
@Before
public void initMocks() {
MockitoAnnotations.initMocks(this);
}
@Test
public void usingAnnotationBasedMock() {
mockedList.add("one");
mockedList.clear();
verify(mockedList).add("one");
verify(mockedList).clear();
}
}
package org.openrewrite.java.testing.junit5;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import java.util.List;
import static org.mockito.Mockito.verify;
public class MockitoTests {
private AutoCloseable mocks;
@Mock
List<String> mockedList;
@BeforeEach
public void initMocks() {
mocks = MockitoAnnotations.openMocks(this);
}
@Test
public void usingAnnotationBasedMock() {
mockedList.add("one");
mockedList.clear();
verify(mockedList).add("one");
verify(mockedList).clear();
}
@AfterEach
void tearDown() throws Exception {
mocks.close();
}
}
@@ -3,2 +3,3 @@
package org.openrewrite.java.testing.junit5;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
import org.mockito.Mock;
@@ -13,0 +14,1 @@
public class MockitoTests {
+ private AutoCloseable mocks;
@Mock
@@ -16,1 +18,1 @@
List<String> mockedList;
- @Before
+ @BeforeEach
public void initMocks() {
@@ -18,1 +20,1 @@
@Before
public void initMocks() {
- MockitoAnnotations.initMocks(this);
+ mocks = MockitoAnnotations.openMocks(this);
}
@@ -30,0 +32,5 @@
verify(mockedList).clear();
}
+
+ @AfterEach
+ void tearDown() throws Exception {
+ mocks.close();
+ }
}
java
example
- java
- Diff
import org.junit.Rule;
import org.junit.contrib.java.lang.system.EnvironmentVariables;
import org.junit.contrib.java.lang.system.ExpectedSystemExit;
import org.junit.contrib.java.lang.system.ProvideSystemProperty;
import org.junit.contrib.java.lang.system.SystemOutRule;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
class CliTest {
@Rule
public final ProvideSystemProperty properties = new ProvideSystemProperty("mode", "test");
@Rule
public final EnvironmentVariables environment = new EnvironmentVariables();
@Rule
public final SystemOutRule out = new SystemOutRule().enableLog().mute();
@Rule
public final ExpectedSystemExit exit = ExpectedSystemExit.none();
@Test
void printsUsageAndExits() {
environment.set("HOME", "/tmp");
exit.expectSystemExitWithStatus(1);
exit.checkAssertionAfterwards(() -> assertEquals("usage", out.getLog()));
System.out.print("usage");
System.exit(1);
}
}
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.junitpioneer.jupiter.SetSystemProperty;
import uk.org.webcompere.systemstubs.environment.EnvironmentVariables;
import uk.org.webcompere.systemstubs.jupiter.SystemStub;
import uk.org.webcompere.systemstubs.jupiter.SystemStubsExtension;
import uk.org.webcompere.systemstubs.stream.SystemOut;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static uk.org.webcompere.systemstubs.SystemStubs.catchSystemExit;
@ExtendWith(SystemStubsExtension.class)
@SetSystemProperty(key = "mode", value = "test")
class CliTest {
@SystemStub
public final EnvironmentVariables environment = new EnvironmentVariables();
@SystemStub
public final SystemOut out = new SystemOut();
@Test
void printsUsageAndExits() throws Exception {
environment.set("HOME", "/tmp");
int status = catchSystemExit(() -> {
System.out.print("usage");
System.exit(1);
});
assertEquals(1, status);
assertEquals("usage", out.getText());
}
}
@@ -1,5 +1,0 @@
-import org.junit.Rule;
-import org.junit.contrib.java.lang.system.EnvironmentVariables;
-import org.junit.contrib.java.lang.system.ExpectedSystemExit;
-import org.junit.contrib.java.lang.system.ProvideSystemProperty;
-import org.junit.contrib.java.lang.system.SystemOutRule;
import org.junit.jupiter.api.Test;
@@ -7,0 +2,6 @@
import org.junit.contrib.java.lang.system.SystemOutRule;
import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.junitpioneer.jupiter.SetSystemProperty;
+import uk.org.webcompere.systemstubs.environment.EnvironmentVariables;
+import uk.org.webcompere.systemstubs.jupiter.SystemStub;
+import uk.org.webcompere.systemstubs.jupiter.SystemStubsExtension;
+import uk.org.webcompere.systemstubs.stream.SystemOut;
@@ -9,0 +10,1 @@
import static org.junit.jupiter.api.Assertions.assertEquals;
+import static uk.org.webcompere.systemstubs.SystemStubs.catchSystemExit;
@@ -10,0 +12,2 @@
import static org.junit.jupiter.api.Assertions.assertEquals;
+@ExtendWith(SystemStubsExtension.class)
+@SetSystemProperty(key = "mode", value = "test")
class CliTest {
@@ -11,2 +15,0 @@
class CliTest {
- @Rule
- public final ProvideSystemProperty properties = new ProvideSystemProperty("mode", "test");
@@ -14,1 +16,1 @@
public final ProvideSystemProperty properties = new ProvideSystemProperty("mode", "test");
- @Rule
+ @SystemStub
public final EnvironmentVariables environment = new EnvironmentVariables();
@@ -17,2 +19,2 @@
public final EnvironmentVariables environment = new EnvironmentVariables();
- @Rule
- public final SystemOutRule out = new SystemOutRule().enableLog().mute();
+ @SystemStub
+ public final SystemOut out = new SystemOut();
@@ -20,3 +22,0 @@
public final SystemOutRule out = new SystemOutRule().enableLog().mute();
- @Rule
- public final ExpectedSystemExit exit = ExpectedSystemExit.none();
-
@Test
@@ -24,1 +23,1 @@
@Test
- void printsUsageAndExits() {
+ void printsUsageAndExits() throws Exception {
environment.set("HOME", "/tmp");
@@ -26,4 +25,6 @@
void printsUsageAndExits() {
environment.set("HOME", "/tmp");
- exit.expectSystemExitWithStatus(1);
- exit.checkAssertionAfterwards(() -> assertEquals("usage", out.getLog()));
- System.out.print("usage");
- System.exit(1);
+ int status = catchSystemExit(() -> {
+ System.out.print("usage");
+ System.exit(1);
+ });
+ assertEquals(1, status);
+ assertEquals("usage", out.getText());
}
java
- java
- Diff
import org.junit.Test;
import org.junit.experimental.runners.Enclosed;
import org.junit.runner.RunWith;
@RunWith(Enclosed.class)
public class RootTest {
public static class InnerTest {
@Test
public void test() {
}
}
}
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
public class RootTest {
@Nested
public class InnerTest {
@Test
public void test() {
}
}
}
@@ -1,3 +1,2 @@
-import org.junit.Test;
-import org.junit.experimental.runners.Enclosed;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.Nested;
+import org.junit.jupiter.api.Test;
@@ -5,1 +4,0 @@
import org.junit.runner.RunWith;
-@RunWith(Enclosed.class)
public class RootTest {
@@ -7,1 +5,2 @@
@RunWith(Enclosed.class)
public class RootTest {
- public static class InnerTest {
+ @Nested
+ public class InnerTest {
@Test
java
- java
- Diff
import org.junit.Assert;
import org.junit.Test;
import static java.util.Arrays.asList;
import static org.hamcrest.Matchers.containsInAnyOrder;
public class SampleTest {
@SuppressWarnings("ALL")
@Test
public void filterShouldRemoveUnusedConfig() {
Assert.assertThat(asList("1", "2", "3"),
containsInAnyOrder("3", "2", "1"));
}
}
import org.junit.jupiter.api.Test;
import static java.util.Arrays.asList;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.containsInAnyOrder;
public class SampleTest {
@SuppressWarnings("ALL")
@Test
public void filterShouldRemoveUnusedConfig() {
assertThat(asList("1", "2", "3"),
containsInAnyOrder("3", "2", "1"));
}
}
@@ -1,2 +1,1 @@
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
@@ -5,0 +4,1 @@
import static java.util.Arrays.asList;
+import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.containsInAnyOrder;
@@ -11,1 +11,1 @@
@Test
public void filterShouldRemoveUnusedConfig() {
- Assert.assertThat(asList("1", "2", "3"),
+ assertThat(asList("1", "2", "3"),
containsInAnyOrder("3", "2", "1"));
java
- java
- Diff
package org.openrewrite.java.testing.junit5;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import java.util.List;
import static org.mockito.Mockito.verify;
public class MockitoTests {
@Mock
List<String> mockedList;
@Before
public void initMocks() {
MockitoAnnotations.initMocks(this);
}
@Test
public void usingAnnotationBasedMock() {
mockedList.add("one");
mockedList.clear();
verify(mockedList).add("one");
verify(mockedList).clear();
}
}
package org.openrewrite.java.testing.junit5;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import java.util.List;
import static org.mockito.Mockito.verify;
public class MockitoTests {
private AutoCloseable mocks;
@Mock
List<String> mockedList;
@BeforeEach
public void initMocks() {
mocks = MockitoAnnotations.openMocks(this);
}
@Test
public void usingAnnotationBasedMock() {
mockedList.add("one");
mockedList.clear();
verify(mockedList).add("one");
verify(mockedList).clear();
}
@AfterEach
void tearDown() throws Exception {
mocks.close();
}
}
@@ -3,2 +3,3 @@
package org.openrewrite.java.testing.junit5;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
import org.mockito.Mock;
@@ -13,0 +14,1 @@
public class MockitoTests {
+ private AutoCloseable mocks;
@Mock
@@ -16,1 +18,1 @@
List<String> mockedList;
- @Before
+ @BeforeEach
public void initMocks() {
@@ -18,1 +20,1 @@
@Before
public void initMocks() {
- MockitoAnnotations.initMocks(this);
+ mocks = MockitoAnnotations.openMocks(this);
}
@@ -30,0 +32,5 @@
verify(mockedList).clear();
}
+
+ @AfterEach
+ void tearDown() throws Exception {
+ mocks.close();
+ }
}
java
example
- java
- Diff
import org.junit.Rule;
import org.junit.contrib.java.lang.system.EnvironmentVariables;
import org.junit.contrib.java.lang.system.ExpectedSystemExit;
import org.junit.contrib.java.lang.system.ProvideSystemProperty;
import org.junit.contrib.java.lang.system.SystemOutRule;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
class CliTest {
@Rule
public final ProvideSystemProperty properties = new ProvideSystemProperty("mode", "test");
@Rule
public final EnvironmentVariables environment = new EnvironmentVariables();
@Rule
public final SystemOutRule out = new SystemOutRule().enableLog().mute();
@Rule
public final ExpectedSystemExit exit = ExpectedSystemExit.none();
@Test
void printsUsageAndExits() {
environment.set("HOME", "/tmp");
exit.expectSystemExitWithStatus(1);
exit.checkAssertionAfterwards(() -> assertEquals("usage", out.getLog()));
System.out.print("usage");
System.exit(1);
}
}
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.junitpioneer.jupiter.SetSystemProperty;
import uk.org.webcompere.systemstubs.environment.EnvironmentVariables;
import uk.org.webcompere.systemstubs.jupiter.SystemStub;
import uk.org.webcompere.systemstubs.jupiter.SystemStubsExtension;
import uk.org.webcompere.systemstubs.stream.SystemOut;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static uk.org.webcompere.systemstubs.SystemStubs.catchSystemExit;
@ExtendWith(SystemStubsExtension.class)
@SetSystemProperty(key = "mode", value = "test")
class CliTest {
@SystemStub
public final EnvironmentVariables environment = new EnvironmentVariables();
@SystemStub
public final SystemOut out = new SystemOut();
@Test
void printsUsageAndExits() throws Exception {
environment.set("HOME", "/tmp");
int status = catchSystemExit(() -> {
System.out.print("usage");
System.exit(1);
});
assertEquals(1, status);
assertEquals("usage", out.getText());
}
}
@@ -1,5 +1,0 @@
-import org.junit.Rule;
-import org.junit.contrib.java.lang.system.EnvironmentVariables;
-import org.junit.contrib.java.lang.system.ExpectedSystemExit;
-import org.junit.contrib.java.lang.system.ProvideSystemProperty;
-import org.junit.contrib.java.lang.system.SystemOutRule;
import org.junit.jupiter.api.Test;
@@ -7,0 +2,6 @@
import org.junit.contrib.java.lang.system.SystemOutRule;
import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.junitpioneer.jupiter.SetSystemProperty;
+import uk.org.webcompere.systemstubs.environment.EnvironmentVariables;
+import uk.org.webcompere.systemstubs.jupiter.SystemStub;
+import uk.org.webcompere.systemstubs.jupiter.SystemStubsExtension;
+import uk.org.webcompere.systemstubs.stream.SystemOut;
@@ -9,0 +10,1 @@
import static org.junit.jupiter.api.Assertions.assertEquals;
+import static uk.org.webcompere.systemstubs.SystemStubs.catchSystemExit;
@@ -10,0 +12,2 @@
import static org.junit.jupiter.api.Assertions.assertEquals;
+@ExtendWith(SystemStubsExtension.class)
+@SetSystemProperty(key = "mode", value = "test")
class CliTest {
@@ -11,2 +15,0 @@
class CliTest {
- @Rule
- public final ProvideSystemProperty properties = new ProvideSystemProperty("mode", "test");
@@ -14,1 +16,1 @@
public final ProvideSystemProperty properties = new ProvideSystemProperty("mode", "test");
- @Rule
+ @SystemStub
public final EnvironmentVariables environment = new EnvironmentVariables();
@@ -17,2 +19,2 @@
public final EnvironmentVariables environment = new EnvironmentVariables();
- @Rule
- public final SystemOutRule out = new SystemOutRule().enableLog().mute();
+ @SystemStub
+ public final SystemOut out = new SystemOut();
@@ -20,3 +22,0 @@
public final SystemOutRule out = new SystemOutRule().enableLog().mute();
- @Rule
- public final ExpectedSystemExit exit = ExpectedSystemExit.none();
-
@Test
@@ -24,1 +23,1 @@
@Test
- void printsUsageAndExits() {
+ void printsUsageAndExits() throws Exception {
environment.set("HOME", "/tmp");
@@ -26,4 +25,6 @@
void printsUsageAndExits() {
environment.set("HOME", "/tmp");
- exit.expectSystemExitWithStatus(1);
- exit.checkAssertionAfterwards(() -> assertEquals("usage", out.getLog()));
- System.out.print("usage");
- System.exit(1);
+ int status = catchSystemExit(() -> {
+ System.out.print("usage");
+ System.exit(1);
+ });
+ assertEquals(1, status);
+ assertEquals("usage", out.getText());
}
Usage
Run this recipe
This recipe has no required configuration options. Users of Moderne can run it via the Moderne CLI.
You will need to have configured the Moderne CLI on your machine before you can run the following command.
mod run . --recipe JUnit4to5Migration
If the recipe is not available locally, then you can install it using:
RELEASE resolves to the newest release and LATEST to the newest build of any kind, including snapshots. Either one lets mod config recipes upgrade pull in later versions without editing this command; a pinned version stays where you put it.
- RELEASE
- LATEST
- Pinned version
mod config recipes jar install org.openrewrite.recipe:rewrite-testing-frameworks:RELEASE
mod config recipes jar install org.openrewrite.recipe:rewrite-testing-frameworks:LATEST
mod config recipes jar install org.openrewrite.recipe:rewrite-testing-frameworks:3.49.1
Data tables
PowerMock tests disabled for manual migration
org.openrewrite.java.testing.mockito.table.PowerMockTestsDisabledTests disabled because they use a PowerMock feature with no Mockito equivalent. Each row is an action item: rework the test so it does not reach into private members, then re-enable it.
mod study . --last-recipe-run \
--data-table org.openrewrite.java.testing.mockito.table.PowerMockTestsDisabled
| Column | Description |
|---|---|
| Source path | The path of the test source file. |
| Test class | The test class the disabled test belongs to. |
| Disabled element | The test method that was disabled, or the class name when the usage sits outside a test method and the whole class had to be disabled. |
| Scope | METHOD when a single test was disabled, CLASS when the whole test class was. |
| Reason | The PowerMock usage that cannot be migrated. |
Maven metadata failures
org.openrewrite.maven.table.MavenMetadataFailuresAttempts to resolve maven metadata that failed.
mod study . --last-recipe-run \
--data-table org.openrewrite.maven.table.MavenMetadataFailures
| Column | Description |
|---|---|
| Group id | The groupId of the artifact for which the metadata download failed. |
| Artifact id | The artifactId of the artifact for which the metadata download failed. |
| Version | The version of the artifact for which the metadata download failed. |
| Maven repository | The URL of the Maven repository that the metadata download failed on. |
| Snapshots | Does the repository support snapshots. |
| Releases | Does the repository support releases. |
| Failure | The reason the metadata download failed. |
Source files that had results
org.openrewrite.table.SourcesFileResultsSource files that were modified by the recipe run.
mod study . --last-recipe-run \
--data-table org.openrewrite.table.SourcesFileResults
| Column | Description |
|---|---|
| Source path before the run | The source path of the file before the run. null when a source file was created during the run. |
| Source path after the run | A recipe may modify the source path. This is the path after the run. null when a source file was deleted during the run. |
| Parent of the recipe that made changes | In a hierarchical recipe, the parent of the recipe that made a change. Empty if this is the root of a hierarchy or if the recipe is not hierarchical at all. |
| Recipe that made changes | The specific recipe that made a change. |
| Estimated time saving | An estimated effort that a developer to fix manually instead of using this recipe, in unit of seconds. |
| Cycle | The recipe cycle in which the change was made. |
Source files that had search results
org.openrewrite.table.SearchResultsSearch results that were found during the recipe run.
mod study . --last-recipe-run \
--data-table org.openrewrite.table.SearchResults
| Column | Description |
|---|---|
| Source path of search result before the run | The source path of the file with the search result markers present. |
| Source path of search result after run the run | A recipe may modify the source path. This is the path after the run. null when a source file was deleted during the run. |
| Result | The trimmed printed tree of the LST element that the marker is attached to. |
| Description | The content of the description of the marker. |
| Recipe that added the search marker | The specific recipe that added the Search marker. |
Source files that errored on a recipe
org.openrewrite.table.SourcesFileErrorsThe details of all errors produced by a recipe run.
mod study . --last-recipe-run \
--data-table org.openrewrite.table.SourcesFileErrors
| Column | Description |
|---|---|
| Source path | The file that failed to parse. |
| Recipe that made changes | The specific recipe that made a change. |
| Stack trace | The stack trace of the failure. |
Recipe performance
org.openrewrite.table.RecipeRunStatsStatistics used in analyzing the performance of recipes.
mod study . --last-recipe-run \
--data-table org.openrewrite.table.RecipeRunStats
| Column | Description |
|---|---|
| The recipe | The recipe whose stats are being measured both individually and cumulatively. |
| Source file count | The number of source files the recipe ran over. |
| Source file changed count | The number of source files which were changed in the recipe run. Includes files created, deleted, and edited. |
| Cumulative scanning time (ns) | The total time spent across the scanning phase of this recipe. |
| Max scanning time (ns) | The max time scanning any one source file. |
| Cumulative edit time (ns) | The total time spent across the editing phase of this recipe. |
| Max edit time (ns) | The max time editing any one source file. |