Ruby Test::Unit有一个很好的assert_matches方法,可以在单元测试中用来断言正则表达式匹配一个字符串.
在JUnit中有这样的东西吗?目前,我这样做:
assertEquals(true, actual.matches(expectedRegex));
Run Code Online (Sandbox Code Playgroud)
pho*_*ser 85
如果你使用assertThat()了Hamcrest匹配,对正则表达式匹配测试,那么如果断言失败,你会得到一个不错的消息,表明预期的模式和实际文本.断言也将更加流利地阅读,例如
assertThat("FooBarBaz", matchesPattern("^Foo"));
Run Code Online (Sandbox Code Playgroud)
Miq*_*uel 48
我不知道其他选择.刚刚检查了断言javadoc以确定.但是,只是一点点变化:
assertTrue(actual.matches(expectedRegex));
Run Code Online (Sandbox Code Playgroud)
编辑:自从pholser的回答以来,我一直在使用Hamcrest匹配器,请检查一下!
Ral*_*lph 19
你可以使用Hamcrest,但你必须编写自己的匹配器:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
用法
import org.junit.Assert;
Assert.assertThat("test", RegexMatcher.matchesRegex(".*est");
Run Code Online (Sandbox Code Playgroud)
yeg*_*256 17
你可以使用Hamcrest和jcabi-matchers:
import static com.jcabi.matchers.RegexMatchers.matchesPattern;
import static org.junit.Assert.assertThat;
assertThat("test", matchesPattern("[a-z]+"));
Run Code Online (Sandbox Code Playgroud)
更多细节:正则表达式Hamcrest Matchers.
您将在classpath中需要这两个依赖项:
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-core</artifactId>
<version>1.3</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.jcabi</groupId>
<artifactId>jcabi-matchers</artifactId>
<version>1.3</version>
<scope>test</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)