Assert regex matches in JUnit

Solution 1:

If you use assertThat() with a Hamcrest matcher that tests for regex matches, then if the assertion fails you'll get a nice message that indicates expected pattern and actual text. The assertion will read more fluently also, e.g.

assertThat("FooBarBaz", matchesPattern("^Foo"));

with Hamcrest 2 you can find a matchesPattern method at MatchesPattern.matchesPattern.

Solution 2:

No other choice that I know. Just checked the assert javadoc to be sure. Just a tiny little change, though:

assertTrue(actual.matches(expectedRegex));

EDIT: I have been using the Hamcrest matchers since pholser's answer, check that out too!

Solution 3:

You can use Hamcrest, but you have to write your own matcher:

public class RegexMatcher extends TypeSafeMatcher<String> {

    private final String regex;

    public RegexMatcher(final String regex) {
        this.regex = regex;
    }

    @Override
    public void describeTo(final Description description) {
        description.appendText("matches regex=`" + regex + "`");
    }

    @Override
    public boolean matchesSafely(final String string) {
        return string.matches(regex);
    }


    public static RegexMatcher matchesRegex(final String regex) {
        return new RegexMatcher(regex);
    }
}

usage

import org.junit.Assert;


Assert.assertThat("test", RegexMatcher.matchesRegex(".*est");