diff --git a/SUMMARY.md b/SUMMARY.md index ddc39669c9..3a2032bab2 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -21,6 +21,7 @@ * [Refactoring with declarative YAML recipes](running-recipes/popular-recipe-guides/authoring-declarative-yaml-recipes.md) * [Automating Maven dependency management](running-recipes/popular-recipe-guides/automating-maven-dependency-management.md) * [Migrate Hamcrest to AssertJ](running-recipes/popular-recipe-guides/hamcrest-to-assertj.md) + * [Migrate JUnit Asserts to AssertJ](/running-recipes/popular-recipe-guides/junit-asserts-to-assertj.md) * [Authoring Recipes](authoring-recipes/authoring-recipes.md) * [Recipe development environment](authoring-recipes/recipe-development-environment.md) * [The different types of recipes](authoring-recipes/types-of-recipes.md) diff --git a/running-recipes/popular-recipe-guides/junit-asserts-to-assertj.md b/running-recipes/popular-recipe-guides/junit-asserts-to-assertj.md new file mode 100644 index 0000000000..a3480dd89b --- /dev/null +++ b/running-recipes/popular-recipe-guides/junit-asserts-to-assertj.md @@ -0,0 +1,143 @@ +# Migrate to AssertJ from JUnit Asserts + +In this tutorial, we'll use OpenRewrite to perform an automated migration from [JUnit Asserts](https://junit.org/junit4/javadoc/4.13/org/junit/Assert.html) to [AssertJ](https://assertj.github.io/doc/). AssertJ is a Java library that provides a rich set of assertions and truly helpful error messages, improves test code readability, and is designed to be super easy to use within your favorite IDE. + +## Example Configuration + +The migrate to AssertJ recipe can be applied by adding OpenRewrite's plugin to your project and including a dependency on [rewrite-testing-frameworks](https://github.com/openrewrite/rewrite-testing-frameworks): + +{% tabs %} +{% tab title="Maven" %} +{% code title="pom.xml" %} +```xml + + + + org.openrewrite.maven + rewrite-maven-plugin + 5.15.4 + + + org.openrewrite.java.testing.assertj.JUnitToAssertj + + + + + org.openrewrite.recipe + rewrite-testing-frameworks + 2.1.4 + + + + + +``` +{% endcode %} +{% endtab %} + +{% tab title="Gradle" %} +{% code title="build.gradle" %} +```groovy + plugins { + id("java") + id("org.openrewrite.rewrite") version("6.5.12") + } + + rewrite { + activeRecipe("org.openrewrite.java.testing.assertj.JUnitToAssertj") + } + + repositories { + mavenCentral() // rewrite-spring is published to Maven Central + } + + dependencies { + rewrite(platform("org.openrewrite.recipe:rewrite-recipe-bom:2.5.3")) + rewrite("org.openrewrite.recipe:rewrite-testing-frameworks") + + // Other project dependencies + } +``` +{% endcode %} +{% endtab %} +{% endtabs %} + +At this point, you're ready to execute the migration by running `mvn rewrite:run` or `gradlew rewriteRun`. After running the migration you can inspect the results with `git diff` (or equivalent), manually fix anything that wasn't able to be migrated automatically, and commit the results. + +## Before and After + +For the full list of changes, this recipe will make, see its [reference page](/reference/recipes/java/testing/assertj/junittoassertj.md). + +{% tabs %} +{% tab title="JUnit Assert Test Class (Before)" %} +```java +package org.openrewrite.example; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assertions.fail; +import static org.junit.jupiter.api.Assertions.assertThrows; + +public class ExampleJunitTestClass { + + @Test + void someTest() { + try { + QueryRegistry queryRegistry = new QueryRegistry.Builder().build(); + fail(); + } catch (IllegalArgumentException ignored) { + } + + // ... + + assertEquals(1, currentSubs.size()); + assertEquals("myPrefix_subId", currentSubs.get(0).getSubscriptionId()); + assertTrue(allSubscriptions.containsKey("myApp")); + } + + @Test + void shouldFailToInitializeWithMissingTable() { + when(catalog.loadTable(any())).thenThrow(new RuntimeException()); + IcebergWriterStage stage = new IcebergWriterStage(); + assertThrows(RuntimeException.class, () -> stage.init(context)); + } +} +``` +{% endtab %} + +{% tab title="AssertJ Test Class (After)" %} +```java +package org.openrewrite.example; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.fail; +import static org.assertj.core.api.AssertionsForClassTypes.assertThatExceptionOfType; + + +public class ExampleJunitTestClass { + + @Test + void someTest() { + try { + QueryRegistry queryRegistry = new QueryRegistry.Builder().build(); + fail(""); + } catch (IllegalArgumentException ignored) { + } + + // ... + + assertThat(currentSubs.size()).isEqualTo(1); + assertThat(currentSubs.get(0).getSubscriptionId()).isEqualTo("myPrefix_subId"); + assertThat(allSubscriptions.containsKey("myApp")).isTrue(); + } + + @Test + void shouldFailToInitializeWithMissingTable() { + when(catalog.loadTable(any())).thenThrow(new RuntimeException()); + IcebergWriterStage stage = new IcebergWriterStage(); + assertThatExceptionOfType(RuntimeException.class).isThrownBy(() -> stage.init(context)); + } +} +``` +{% endtab %} +{% endtabs %} diff --git a/running-recipes/running-recipes.md b/running-recipes/running-recipes.md index 3666d6771c..0bcd0fa69d 100644 --- a/running-recipes/running-recipes.md +++ b/running-recipes/running-recipes.md @@ -18,3 +18,4 @@ * [Refactoring with declarative YAML recipes](/running-recipes/popular-recipe-guides/authoring-declarative-yaml-recipes.md) * [Automating Maven dependency management](/running-recipes/popular-recipe-guides/automating-maven-dependency-management.md) * [Migrate Hamcrest to AssertJ](/running-recipes/popular-recipe-guides/hamcrest-to-assertj.md) + * [Migrate JUnit Asserts to AssertJ](/running-recipes/popular-recipe-guides/junit-asserts-to-assertj.md)