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.

Configuration

Configure your repository according to the instructions on the reference page. This is also where you'll find the full list of changes this recipe will make.

Before and After

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);
    }
}

See how this recipe works across multiple open-source repositories

The community edition of the Moderne platform enables you to easily run recipes across thousands of open-source repositories.

Please contact Moderne for more information about safely running the recipes on your own codebase in a private SaaS.

Last updated