assertThat()
とを使用してリストが空かどうかを確認する方法を誰かが知っているかどうか疑問に思いましたかMatchers
?
JUnitを使用するだけで確認できる最善の方法は次のとおりです。
assertFalse(list.isEmpty());
しかし、私はハムクレストでこれを行う方法があることを望んでいました。
assertThat()
とを使用してリストが空かどうかを確認する方法を誰かが知っているかどうか疑問に思いましたかMatchers
?
JUnitを使用するだけで確認できる最善の方法は次のとおりです。
assertFalse(list.isEmpty());
しかし、私はハムクレストでこれを行う方法があることを望んでいました。
まあ常にあります
assertThat(list.isEmpty(), is(false));
...しかし、それはあなたが意図したことではないと思います:)
または:
assertThat((Collection)list, is(not(empty())));
empty()
Matchers
クラス内の静的です。Hamcrest 1.2の不安定なジェネリックスのおかげで、list
にキャストする必要があることに注意してください。Collection
次のインポートは、hamcrest1.3で使用できます。
import static org.hamcrest.Matchers.empty;
import static org.hamcrest.core.Is.is;
import static org.hamcrest.core.IsNot.*;
これはHamcrest1.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)));
上記のソリューションで最も重要なことは、警告が生成されないことです。最小結果サイズを推定したい場合は、2番目のソリューションがさらに役立ちます。
読み取り可能な失敗メッセージが必要な場合は、空のリストで通常のassertEqualsを使用することにより、ハムクレストなしで実行できます。
assertEquals(new ArrayList<>(0), yourList);
たとえば、実行する場合
assertEquals(new ArrayList<>(0), Arrays.asList("foo", "bar");
あなたが得る
java.lang.AssertionError
Expected :[]
Actual :[foo, bar]
ジェネリックの問題が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())