1. ホーム
  2. java

[解決済み] Iterable が特定のプロパティを持つ要素を含むことを保証するにはどうすればよいですか?

2022-06-20 13:56:45

質問

このシグネチャを持つメソッドをユニットテストしたいと仮定します。

List<MyItem> getMyItems();

仮定 MyItem は多くのプロパティを持つPojoで、そのうちの1つが "name" を介してアクセスされます。 getName() .

私が気にするのは List<MyItem> であるか、あるいは Iterable を含む場合、2つの MyItem インスタンスがあり、その "name" プロパティは値 "foo""bar" . 他のプロパティが一致しなくても、このテストの目的からすればどうでもいいことです。 名前が一致すれば、テストは成功です。

可能であれば、ワンライナーで済ませたいのですが。以下は、私がやりたいことのいくつかの "擬似シンタックス"です。

assert(listEntriesMatchInAnyOrder(myClass.getMyItems(), property("name"), new String[]{"foo", "bar"});

Hamcrestはこの種のものに適しているのでしょうか? もしそうなら、上記の私の擬似構文のハムクレストバージョンは正確に何でしょうか?

どのように解決するのですか?

ご指摘いただいた@Razvanさん、ありがとうございました。 一行で済ませることができ、無事Hamcrest 1.3のimportを追い詰めることができました。

のインポートを取得しました。

import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.Matchers.contains;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.beans.HasPropertyWithValue.hasProperty;

のコードです。

assertThat( myClass.getMyItems(), contains(
    hasProperty("name", is("foo")), 
    hasProperty("name", is("bar"))
));