Hamcrest Matchers - 断言列表类型

时间:2014-05-29 14:10:31

标签: java assert matcher hamcrest

问题

我目前正在尝试使用Hamcrest Matchers声明返回的列表类型是特定类型。例如,假设我的服务电话正在返回以下列表:

List<SomePOJO> myList;

我想声明返回的列表是参数化类型SomePOJO而不是TheOtherPOJO。但是,似乎Hamcrest Matchers没有这种功能。

我尝试过什么

经过一番研究,我看到了以下几种选择:

  1. 我看到有hasItem(isA(SomePJO.class)),但这只有在列表中有元素时才有效,而如果列表为空则不行。
  2. 可以使用is(instanceOf(List.class)),但这只会声明返回的项目是List;它没有断言返回列表的类型
  3. 我也可以在assert语句之前的列表中添加一个元素,然后使用assertThat(somePojo.get(0), is(instanceOf(SomePOJO.class))),但这并不是很干净。它也与第1点非常相似。
  4. 结论/问题

    使用Hamcrest Matchers,有没有办法断言空列表是否是某种类型的参数化(例如assertThat(myList, is(aListOf(SomePOJO.class))))?

1 个答案:

答案 0 :(得分:5)

你不能。这是由于type erasure,您无法检查通用类型。编译器会为您强制执行此操作。如果你真的想测试这个,一个选项就是抓住第一个元素并确保你可以把它投射到SomePOJO。 (或者,也可以抓住每个元素并尝试演员阵容,但我相信这太过分了。)