To compare string values we can use the isEqualTo(String)
method in AssertJ.
But if we want to verify that a string contains a certain variable value we can use string templates.
This makes the assertion more readable as we can see what value we expect in the string.
To use string templates we must the method isEqualTo(String, Object…)
.
The first argument is the string template and the following arguments will be the actual values that should be used in the template.
Actually the String.format(String, Object…)
method is used behind the scenes to format the string template, but we don’t have to clutter our assertions with that call.
In the following example we see how we can use string templates to verify string values:
package mrhaki; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import static org.assertj.core.api.Assertions.assertThat; public class StringIsEqualToTemplate { @Test void verifyStringIsEqualTo() { // We can use a template to define the format of the String. // If we do actually String.format() is used to create // our expected value. assertThat("AssertJ is awesome!").isEqualTo("%s is %s!", "AssertJ", "awesome"); } // Using a template can be very useful for example in parameterized tests. @ParameterizedTest @ValueSource(strings = {"AssertJ", "Spock"}) void verifyStringFormat(String libraryName) { // given record Library(String name) { @Override public String toString() { return name; } } var library = new Library(libraryName); // expect assertThat(library.name() + " is awesome").isEqualTo("%s is awesome", library); } @Test void verifyStringIsNotEqualTo() { // There is no method implementation for isNotEqualTo where we can define // the format as first argument. But we can still use String.format // ourselves to achieve the same functionality. assertThat("AssertJ is awesome!").isNotEqualTo(String.format("%s is %s!", "Spock", "awesome")); } }
Written with AssertJ 3.24.2.