RubyにTest::Unit
は、assert_matches
正規表現が文字列と一致することを表明するための単体テストで使用できる優れたメソッドがあります。
JUnitにこのようなものはありますか?現在、私はこれを行います:
assertEquals(true, actual.matches(expectedRegex));
回答:
正規表現の一致をテストassertThat()
するHamcrestマッチャーと一緒に使用する場合、アサーションが失敗すると、予想されるパターンと実際のテキストを示す素敵なメッセージが表示されます。アサーションは、より流暢に読みます。
assertThat("FooBarBaz", matchesPattern("^Foo"));
Hamcrest 2を使用すると、でmatchesPattern
メソッドを見つけることができますMatchesPattern.matchesPattern
。
私が知っている他の選択肢はありません。確認のためにassertjavadocをチェックしました。ただし、ほんの少しの変更です。
assertTrue(actual.matches(expectedRegex));
編集:私はpholserの答え以来Hamcrestマッチャーを使用しています、それもチェックしてください!
assertTrue()
間違いなくいいです。私はそれについて知らない私のためにEclipseのオートコンプリートを非難します。;)
assertTrue
多くの詳細としてあなたを与えることができないassertEquals
か、assertThat
テストが失敗したときに
assertTrue("Expected string matching '" +expectedRegex+ "'. Got: "+actual, actual.matches(expectedRegex));
。しかし、それはハムクレストほど良くはありません。
is(true)
、それassertThat
以上の詳細は表示されassertTrue
ません。適切なエラーメッセージを取得するには、別のマッチャーが必要です(または、@ MikeFHayが提案したようにメッセージを手動で作成します)。
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);
}
}
使用法
import org.junit.Assert;
Assert.assertThat("test", RegexMatcher.matchesRegex(".*est");
Hamcrestとjcabi-matchersを使用できます:
import static com.jcabi.matchers.RegexMatchers.matchesPattern;
import static org.junit.Assert.assertThat;
assertThat("test", matchesPattern("[a-z]+"));
詳細はこちら:正規表現ハムクレストマッチャー。
クラスパスには次の2つの依存関係が必要です。
<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>
この機能も探していたので、GitHubでregex-testerというプロジェクトを開始しました。これは、Javaでの正規表現のテストを容易にするのに役立つライブラリです(現在、JUnitでのみ機能します)。
ライブラリは現在非常に限られていますが、このように機能するハムクレストマッチャーがあります
assertThat("test", doesMatchRegex("tes.+"));
assertThat("test", doesNotMatchRegex("tex.+"));
regex-testerの使用方法の詳細については、こちらをご覧ください。
Hamcrestには対応するマッチャーがあります:org.hamcrest.Matchers.matchesPattern(String regex)。
Hamcrestの開発が停滞しているため、利用可能な最新のv1.3を使用できません。
testCompile("org.hamcrest:hamcrest-library:1.3")
代わりに、新しい開発シリーズを使用する必要があります(ただし、2015年1月までの日付です)。
testCompile("org.hamcrest:java-hamcrest:2.0.0.0")
またはさらに良い:
configurations {
testCompile.exclude group: "org.hamcrest", module: "hamcrest-core"
testCompile.exclude group: "org.hamcrest", module: "hamcrest-library"
}
dependencies {
testCompile("org.hamcrest:hamcrest-junit:2.0.0.0")
}
テスト中:
Assert.assertThat("123456", Matchers.matchesPattern("^[0-9]+$"));
Matchers.matchesPattern(String)
、今ビルトイン:github.com/hamcrest/JavaHamcrest/blob/master/hamcrest-library/...