Java hamcrest包含仅适用于特定订单的任何订单

Java hamcrest包含仅适用于特定订单的任何订单,java,collections,junit,hamcrest,Java,Collections,Junit,Hamcrest,我正在尝试做一个测试,检查某个列表是否有项目,而我不关心顺序。 我希望能够做到这一点的方法是测试该项具有特定属性和特定值 我用以下代码隔离了senario: 我正在使用的类: 公共A类{ 私有字符串propA; 公共A(最终字符串propA){ this.propA=propA; } 公共字符串getPropA(){ 返回propA; } 公共无效setPropA(最终字符串propA){ this.propA=propA; } } 测试类 import static org.hamcres

我正在尝试做一个测试,检查某个列表是否有项目,而我不关心顺序。
我希望能够做到这一点的方法是测试该项具有特定属性和特定值

我用以下代码隔离了senario:

我正在使用的类:

公共A类{
私有字符串propA;
公共A(最终字符串propA){
this.propA=propA;
}
公共字符串getPropA(){
返回propA;
}
公共无效setPropA(最终字符串propA){
this.propA=propA;
}
}
测试类

import static org.hamcrest.matcherasert.assertThat;
导入静态org.hamcrest.Matchers.equalTo;
导入静态org.hamcrest.beans.HasPropertyWithValue.hasProperty;
导入静态org.hamcrest.collection.isiterablecaininganyorder.containsInAnyOrder;
导入java.util.ArrayList;
导入java.util.List;
导入org.junit.Test;
公共类HamcrestCollectionTest{
@试验
public void testContainsInAnyOrder(){
列表=新的ArrayList();
列表。添加(新A(“A”);
增加(新的A(“b”);
资产(列表,包含任何顺序(hasProperty(“propA”,equalTo(“b”)),hasProperty(“propA”,equalTo(“a”)));
}
}
这个测试失败了。如果我在countainsInAnyOrder中切换列表的值,那么这是有效的。这并不是我所期望的“containsInAnyOrder”

正确的方法是什么?

或者有没有办法检查单个值是否存在?

我发现了问题所在。这确实是引起问题的hamcrest类的一个版本

采取的步骤:

  • 更新了maven依赖插件的版本
    • 原因:
      • 无法运行命令mvn dependency:tree
  • 将我的mockito依赖项从mockito all更改为mockito core
    • 原因:
      • mockito all依赖项直接包含类org.hamcrest.Matcher的一个版本
      • 当您查看加载了什么dependencie时,这并不是简单可见的(因为它位于mockito alljar本身,而不在jar的依赖项中)
  • 在DependencyManager中将hamcrest core的版本设置为1.3
    • 原因:
      • mockito core依赖于hamcrest core,但使用版本1.1
      • hamcrest-core的mockito-core版本优先于junit版本的hamcrest-core依赖项

  • 基本上,这是使用mockito all

    引起的冲突。我尝试了相同的测试,效果很好。你用最小的项目尝试过这个吗?你用的是什么版本的Hamcrest?我试过这两个类,我看不出还有什么比这个更小的了。junit的版本是4.11,Hamcrest的版本是4.11is 1.3。我刚刚在我的计算机上的新项目上尝试了完全相同的代码,实际上,它正在工作。我想我需要在项目上再次检查hamcrest的版本,但它不工作。我会就此与你联系。