diff --git a/src/main/java/org/openrewrite/java/spring/test/ExpectedExceptionToAssertThrows.java b/src/main/java/org/openrewrite/java/spring/test/ExpectedExceptionToAssertThrows.java new file mode 100644 index 000000000..4ac7fd24a --- /dev/null +++ b/src/main/java/org/openrewrite/java/spring/test/ExpectedExceptionToAssertThrows.java @@ -0,0 +1,34 @@ +/* + * Copyright 2024 the original author or authors. + *

+ * Licensed 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 + *

+ * https://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.openrewrite.java.spring.test; + +import org.openrewrite.NlsRewrite.Description; +import org.openrewrite.NlsRewrite.DisplayName; +import org.openrewrite.Recipe; + +public class ExpectedExceptionToAssertThrows extends Recipe { + + @Override + public @DisplayName String getDisplayName() { + return "Migrate JUnit 4's ExpectedException"; + } + + @Override + public @Description String getDescription() { + return "Replace JUnit 4's ExpectedException with JUnit 5's assertThrows."; + } + +} diff --git a/src/test/java/org/openrewrite/java/spring/test/ExpectedExceptionToAssertThrowsTest.java b/src/test/java/org/openrewrite/java/spring/test/ExpectedExceptionToAssertThrowsTest.java new file mode 100644 index 000000000..b4e305b35 --- /dev/null +++ b/src/test/java/org/openrewrite/java/spring/test/ExpectedExceptionToAssertThrowsTest.java @@ -0,0 +1,79 @@ +/* + * Copyright 2024 the original author or authors. + *

+ * Licensed 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 + *

+ * https://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. + */ + +import org.junit.jupiter.api.Test; +import org.openrewrite.DocumentExample; +import org.openrewrite.InMemoryExecutionContext; +import org.openrewrite.java.JavaParser; +import org.openrewrite.test.RecipeSpec; +import org.openrewrite.test.RewriteTest; + +import static org.openrewrite.java.Assertions.java; + +class ExpectedExceptionToAssertThrowsTest implements RewriteTest { + + @Override + public void defaults(RecipeSpec spec) { + spec.recipe(new ExpectedExceptionToAssertThrows()) + .parser(JavaParser.fromJavaVersion() + .classpathFromResources(new InMemoryExecutionContext(), "spring-boot-test", "spring-test") + ); + } + + @Test + @DocumentExample + void thatExpectedExceptionIsMigratedToAssertThrows() { + rewriteRun( + //language=java + java( + """ + import org.junit.Rule; + import org.junit.Test; + import org.junit.rules.ExpectedException; + + class SomeTest { + + @Rule + public ExpectedException thrown = ExpectedException.none(); + + @Test + public void test() { + thrown.expectMessage("exception"); + throw new RuntimeException("exception"); + } + } + """, + """ + import org.junit.Rule; + import org.junit.Test; + import org.junit.rules.ExpectedException; + + class SomeTest { + + @Rule + public ExpectedException thrown = ExpectedException.none(); + + @Test + public void test() { + thrown.expectMessage("exception"); + throw new RuntimeException("exception"); + } + } + """ + ) + ); + } +}