问题
我目前正在尝试使用Hamcrest Matchers声明返回的列表类型是特定类型。例如,假设我的服务电话正在返回以下列表:
List<SomePOJO> myList;
我想声明返回的列表是参数化类型SomePOJO
而不是TheOtherPOJO
。但是,似乎Hamcrest Matchers没有这种功能。
我尝试过什么
经过一番研究,我看到了以下几种选择:
hasItem(isA(SomePJO.class))
,但这只有在列表中有元素时才有效,而如果列表为空则不行。is(instanceOf(List.class))
,但这只会声明返回的项目是List;它没有断言返回列表的类型。assertThat(somePojo.get(0), is(instanceOf(SomePOJO.class)))
,但这并不是很干净。它也与第1点非常相似。结论/问题
使用Hamcrest Matchers,有没有办法断言空列表是否是某种类型的参数化(例如assertThat(myList, is(aListOf(SomePOJO.class)))
)?
答案 0 :(得分:5)
你不能。这是由于type erasure,您无法检查通用类型。编译器会为您强制执行此操作。如果你真的想测试这个,一个选项就是抓住第一个元素并确保你可以把它投射到SomePOJO
。 (或者,也可以抓住每个元素并尝试演员阵容,但我相信这太过分了。)