JUnit에서 regex 일치 항목 확인
루비즈Test::Unit
멋지다assert_matches
단위 테스트에서 사용할 수 있는 메서드를 사용하여 정규식이 문자열과 일치함을 확인할 수 있습니다.
JUnit에도 이런 게 있나요?현재는 다음과 같이 하고 있습니다.
assertEquals(true, actual.matches(expectedRegex));
사용하시는 경우assertThat()
정규식을 테스트하는 Hamcrest Matcher를 사용하면 어설션이 실패하면 예상되는 패턴과 실제 텍스트를 나타내는 멋진 메시지가 나타납니다.그 주장은 더 유창하게 읽힐 것이다.
assertThat("FooBarBaz", matchesPattern("^Foo"));
Hamcrest 2를 사용하면matchesPattern
에 있어서의 방법MatchesPattern.matchesPattern
.
내가 아는 바로는 다른 방법이 없어.확인을 위해 javadoc assert를 확인했습니다.하지만 아주 작은 변화일 뿐입니다.
assertTrue(actual.matches(expectedRegex));
편집: Pholser의 답변 이후 햄크레스트 매처스를 사용하고 있습니다. 그것도 확인해 보세요!
Hamcrest를 사용할 수 있지만 직접 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);
}
}
사용.
import org.junit.Assert;
Assert.assertThat("test", RegexMatcher.matchesRegex(".*est");
Hamcrest 및 jcabi 매처를 사용할 수 있습니다.
import static com.jcabi.matchers.RegexMatchers.matchesPattern;
import static org.junit.Assert.assertThat;
assertThat("test", matchesPattern("[a-z]+"));
classpath에는 다음 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 사용 방법에 대한 자세한 내용은 여기를 참조하십시오.
Ralph의 구현과 유사한 매처가 공식 Java Hamcrest 매처 라이브러리에 추가되었습니다.아쉽게도 릴리즈 패키지는 아직 제공되지 않습니다.수업은 GitHub에서 볼 수 있습니다.
assertj를 사용하는 또 다른 대안.이 접근방식은 패턴 객체를 직접 전달할 수 있기 때문에 좋습니다.
import static org.assertj.core.api.Assertions.assertThat;
assertThat("my\nmultiline\nstring").matches(Pattern.compile("(?s)my.*string", Pattern.MULTILINE));
Hamcrest에 대응하는 matcher: org.hamcrest가 있습니다.Matchers.matchesPattern(String regex).
Hamcrest의 개발이 지연되고 있기 때문에 최신 버전 1.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]+$"));
JUnit은 아니지만 fest-assert의 다른 방법은 다음과 같습니다.
assertThat(myTestedValue).as("your value is so so bad").matches(expectedRegex);
JUnit 5 업데이트(추가 라이브러리 없음)
이제 사용할 수 있습니다.assertLinesMatch
https://junit.org/junit5/docs/5.0.1/api/org/junit/jupiter/api/Assertions.html#assertLinesMatch-java.util.List-java.util.List- 에서 설명하고 있는 바와 같이
이 어설션은 여러 줄의 텍스트와 일치하도록 작성되었으므로,List
한 줄만 맞추려고 해도.예:
assertLinesMatch(List.of("Expected at the beginning.*"), List.of(contentUnderTest));
어설션 알고리즘은 정확한 일치를 시도하고 실패하면String.match
기대치를 정규 표현으로 해석합니다.
중요한 주의사항: 고객님의contentUnderTest
여러 행이 포함되어 있습니다..*
정규식이 작동하지 않습니다(.
는 기본적으로는 새 행 문자와 일치하지 않으므로 삽입 플래그를 추가해야 할 수 있습니다(https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html#DOTALL):
// Flag ?s means match new lines
assertLinesMatch(List.of("(?s)Expected at the beginning.*"), List.of(contentWithMultipleLines));
언급URL : https://stackoverflow.com/questions/8505153/assert-regex-matches-in-junit
'programing' 카테고리의 다른 글
!중요한 스타일 덮어쓰기 (0) | 2022.12.09 |
---|---|
JSON을 CSV로 변환하려면 어떻게 해야 합니까? (0) | 2022.12.09 |
MySQL 문자열 바꾸기 (0) | 2022.12.09 |
첫 번째 컴포넌트의 함량을 초월하기 위해 반응 컴포넌트를 다른 반응 컴포넌트로 전달하려면 어떻게 해야 합니까? (0) | 2022.12.09 |
JAVA_를 사용해야 합니다.홈 포인트는 JDK 또는 JRE? (0) | 2022.10.30 |