목록이 Hamcrest에서 비어 있지 않은지 확인
목록을 비울 수 있는 방법을 아는 사람이 있나요?assertThat()
그리고.Matchers
?
JUnit을 사용하는 것이 가장 좋은 방법입니다.
assertFalse(list.isEmpty());
하지만 난 햄크레스트에서 이걸 할 수 있는 방법이 있길 바랐어.
음, 항상 있다
assertThat(list.isEmpty(), is(false));
...그런데 그런 뜻이 아니었나 봐요.
대체 방법:
assertThat((Collection)list, is(not(empty())));
empty()
는 스태틱입니다.Matchers
캐스트의 필요성에 유의해 주세요.list
로.Collection
햄크레스트 1.2의 기발한 제네릭스 덕분이다.
다음 Import는 hamcrest 1.3과 함께 사용할 수 있습니다.
import static org.hamcrest.Matchers.empty;
import static org.hamcrest.core.Is.is;
import static org.hamcrest.core.IsNot.*;
이것은 Hamcrest 1.3으로 고정되어 있습니다.다음 코드는 컴파일되며 경고를 생성하지 않습니다.
// given
List<String> list = new ArrayList<String>();
// then
assertThat(list, is(not(empty())));
단, 버그가 아닌 이전 버전을 사용해야 하는 경우empty()
다음을 사용할 수 있습니다.
hasSize(greaterThan(0))
(import static org.hamcrest.number.OrderingComparison.greaterThan;
또는
import static org.hamcrest.Matchers.greaterThan;
)
예:
// given
List<String> list = new ArrayList<String>();
// then
assertThat(list, hasSize(greaterThan(0)));
위의 솔루션에서 가장 중요한 것은 경고를 생성하지 않는다는 것입니다.두 번째 솔루션은 최소 결과 크기를 추정하려는 경우 훨씬 더 유용합니다.
오류 메시지를 읽을 수 있는 경우 빈 목록에 일반적인 assertEquals를 사용하여 햄크레스트 없이 작업을 수행할 수 있습니다.
assertEquals(new ArrayList<>(0), yourList);
예: 실행한 경우
assertEquals(new ArrayList<>(0), Arrays.asList("foo", "bar");
얻을 수 있다
java.lang.AssertionError
Expected :[]
Actual :[foo, bar]
사용자 지정 IsEmpty Type SafeMatcher를 만듭니다.
제네릭스의 문제가 해결된 경우에도1.3
이 방법의 좋은 점은 이 방법이 어떤 클래스에서든 작동한다는 것입니다.isEmpty()
메서드!뿐만 아니라.Collections
!
예를 들어, 이 기능은String
역시!
/* Matches any class that has an <code>isEmpty()</code> method
* that returns a <code>boolean</code> */
public class IsEmpty<T> extends TypeSafeMatcher<T>
{
@Factory
public static <T> Matcher<T> empty()
{
return new IsEmpty<T>();
}
@Override
protected boolean matchesSafely(@Nonnull final T item)
{
try { return (boolean) item.getClass().getMethod("isEmpty", (Class<?>[]) null).invoke(item); }
catch (final NoSuchMethodException e) { return false; }
catch (final InvocationTargetException | IllegalAccessException e) { throw new RuntimeException(e); }
}
@Override
public void describeTo(@Nonnull final Description description) { description.appendText("is empty"); }
}
이 방법은 다음과 같습니다.
assertThat(list,IsEmptyCollection.empty())
언급URL : https://stackoverflow.com/questions/3631110/checking-that-a-list-is-not-empty-in-hamcrest
'programing' 카테고리의 다른 글
Angular JS: 이미 디렉티브의 스코프가 있는 컨트롤러가 있는데 디렉티브의 링크 함수가 필요한 것은 무엇입니까? (0) | 2022.12.19 |
---|---|
정수나 잘못된 속성 이름과 같은 이름을 가진 개체 속성에 액세스하는 방법은 무엇입니까? (0) | 2022.12.09 |
용어 명확화 - DB에서 엔티티를 가져올 때 JPA 또는 휴지 상태 엔티티를 "하이드레이팅"하는 것은 무엇을 의미합니까? (0) | 2022.12.09 |
다음 SELECT 쿼리를 최적화하는 방법 (0) | 2022.12.09 |
이 메서드는 왜 4를 인쇄합니까? (0) | 2022.12.09 |