hakobera's blog

技術メモ。たまに雑談

JUnit4 で正規表現と一致するかどうかを判定する Matcher

こんなものは絶対に標準で入っていると思うんだけど、どうしてもみつけられなかったので、書きました。

使い方

String url = ... 
assertThat(url, matches("http://test\\.com/[a-zA-Z0-9]+/edit"));

コード

import java.util.regex.Pattern;

import org.hamcrest.Description;
import org.junit.internal.matchers.TypeSafeMatcher;

public class RegexMatcher extends TypeSafeMatcher<String> {

	public static TypeSafeMatcher<String> matches(String criteria) {
		return new RegexMatcher(criteria);
	}

	private final String criteria;
	private final Pattern pattern;

	public RegexMatcher(String criteria) {
		this.criteria = criteria;
		this.pattern = Pattern.compile(criteria);
	}

	@Override
	public void describeTo(Description description) {
		description.appendText("is matched /").appendValue(criteria)
				.appendText("/");
	}

	@Override
	public boolean matchesSafely(String object) {
		return null != object && null != criteria
				&& pattern.matcher(object).matches();
	}
}

どこにあるのかなぁ。