Links

Migrate Hamcrest to AssertJ

Migrate from Hamcrest to AssertJ

In this tutorial, we'll use OpenRewrite to perform an automated migration from Hamcrest to AssertJ. While Hamcrest still functions, it hasn't been updated since 2019 and there's a growing number of issues and pull requests open on the project. On the other hand, AssertJ has much more activity and is generally favored for testing assertions.

Example Configuration

In order to run the migration recipe, you will need to update your project with the following configuration:
Maven
Gradle
Maven Command Line
pom.xml
<project>
<build>
<plugins>
<plugin>
<groupId>org.openrewrite.maven</groupId>
<artifactId>rewrite-maven-plugin</artifactId>
<version>5.23.1</version>
<configuration>
<activeRecipes>
<recipe>org.openrewrite.java.testing.assertj.Assertj</recipe>
</activeRecipes>
</configuration>
<dependencies>
<dependency>
<groupId>org.openrewrite.recipe</groupId>
<artifactId>rewrite-testing-frameworks</artifactId>
<version>2.4.1</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
</project>
build.gradle
plugins {
id("org.openrewrite.rewrite") version("6.8.4")
}
rewrite {
activeRecipe("org.openrewrite.java.testing.assertj.Assertj")
}
repositories {
mavenCentral()
}
dependencies {
rewrite("org.openrewrite.recipe:rewrite-testing-frameworks:2.4.1")
}
You can also use the command line to run the recipe if you don't want to update your project:
shell
mvn -U org.openrewrite.maven:rewrite-maven-plugin:run \
-Drewrite.recipeArtifactCoordinates=org.openrewrite.recipe:rewrite-testing-frameworks:RELEASE \
-Drewrite.activeRecipes=org.openrewrite.java.testing.assertj.Assertj

Before and After

For the full list of changes this recipe will make, see its reference page.

Example test

Before
import org.junit.jupiter.api.Test;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.equalTo;
public class BiscuitTest {
@Test
public void testEquals() {
Biscuit theBiscuit = new Biscuit("Ginger");
Biscuit myBiscuit = new Biscuit("Ginger");
assertThat(theBiscuit, equalTo(myBiscuit));
assertThat("chocolate chips", theBiscuit.getChocolateChipCount(), equalTo(10));
assertThat("hazelnuts", theBiscuit.getHazelnutCount(), equalTo(3));
}
@Test
public void otherExamples() {
// ...
assertThat(foo.get("id")).isEqualTo("test-data");
assertThat(bar.size()).isEqualTo(1);
assertThat(bash.get("one")).isEqualTo(1);
assertThat(baz.size()).isEqualTo(concurrency * maxPerTask);
}
}
After
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat;
public class BiscuitTest {
@Test
public void testEquals() {
Biscuit theBiscuit = new Biscuit("Ginger");
Biscuit myBiscuit = new Biscuit("Ginger");
assertThat(theBiscuit).isEqualTo(myBiscuit);
assertThat(theBiscuit.getChocolateChipCount()).as("chocolate chips").isEqualTo(10);
assertThat(theBiscuit.getHazelnutCount()).as("hazelnuts").isEqualTo(3);
}
@Test
public void otherExamples() {
// ...
assertThat(foo).containsEntry("id", "test-data");
assertThat(bar).hasSize(1);
assertThat(bash).containsEntry("one", 1);
assertThat(baz).hasSize(concurrency * maxPerTask);
}
}