Hamcrest Matchers - 断言列表类型

Mik*_*och 5 java assert hamcrest matcher

问题

我目前正在尝试使用Hamcrest Matchers断言返回的列表类型是特定类型.例如,假设我的服务调用返回了以下列表:

List<SomePOJO> myList;
Run Code Online (Sandbox Code Playgroud)

我想声明返回的列表是参数化的类型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点非常相似.

结论/问题

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

Chr*_*son 5

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