Java 将空集合与Hamcrest'匹配;s hasItem()

Java 将空集合与Hamcrest'匹配;s hasItem(),java,collections,testng,hamcrest,Java,Collections,Testng,Hamcrest,如何使用TestNG和Hamcrest中的hasItem匹配空集合?这是我通过一次测试得到的结果 java.lang.AssertionError: Expected: a collection containing email = null phone = null got: <[]> 其中,expectedMatcher由数据提供者提供。因此,我不确定要传递什么来匹配此“空集合”。我正在传递默认构造函数,但我知道这不起作用,因为它使用null成员创建集合 这是我的数据提供程序

如何使用TestNG和Hamcrest中的
hasItem
匹配空集合?这是我通过一次测试得到的结果

java.lang.AssertionError: 
Expected: a collection containing email = null phone = null
got: <[]>
其中,
expectedMatcher
由数据提供者提供。因此,我不确定要传递什么来匹配此“空集合”。我正在传递默认构造函数,但我知道这不起作用,因为它使用
null
成员创建集合

这是我的数据提供程序的一部分:

{ new ContactAgentUsageMatcher()}

当配置的
电子邮件
名称
都设置为
null
时,您的自定义匹配器将匹配任何现有的
人员
。但是,该集合不包含任何要匹配的
人员。在这种情况下,Hamcrest's未能通过测试,并且是用于空集合的错误匹配器

以下是两种解决方法:

  • 更改数据提供程序和测试以获取完整匹配程序,包括
    hasItem
    。对于上述情况,您将通过。缺点是您需要告诉Java编译器应该使用哪种泛型类型,这会使测试变得混乱

  • 创建第二个测试以处理生成空集合的数据集

  • assertThat(argument.getAllValues(), hasItem(expectedMatcher));
    
    { new ContactAgentUsageMatcher()}