Java 如何对类进行单元测试,以检查它是否可以在集合或映射中使用(即包含始终有效)

Java 如何对类进行单元测试,以检查它是否可以在集合或映射中使用(即包含始终有效),java,scala,unit-testing,set,contains,Java,Scala,Unit Testing,Set,Contains,我发现我在映射和集合中使用的(java)类的某些实例有时无法使用contains方法找到 问题很简单,这个类没有实现“hashCode”(但它有等于)。微妙的是,它实际上大部分时间都在工作:我只是在并发运行某些代码时才发现错误 我现在的问题是,我想做一个单元测试,断言这个类可以在Set/Map中可靠地使用(也就是说,.contains可以工作),但是我不能重现这个bug 正如我所说的,几乎所有的时间它都是有效的。我尝试创建一组实例,然后使用这些实例的副本并行运行多次contains。但它总是有效

我发现我在映射和集合中使用的(java)类的某些实例有时无法使用
contains
方法找到

问题很简单,这个类没有实现“hashCode”(但它有
等于
)。微妙的是,它实际上大部分时间都在工作:我只是在并发运行某些代码时才发现错误

我现在的问题是,我想做一个单元测试,断言这个类可以在Set/Map中可靠地使用(也就是说,
.contains
可以工作),但是我不能重现这个bug

正如我所说的,几乎所有的时间它都是有效的。我尝试创建一组实例,然后使用这些实例的副本并行运行多次
contains
。但它总是有效的

如果item类没有hashCode,那么对mySet.contains(item copy)
的哪个测试肯定会失败

以下是当
MyItem
未实现hashCode时不会失败的测试伪代码:

def testFindInSet(): Unit ={
  val items = Seq(---list of args---).map( args => new MyItem(args)}.toSet
  items.par.foreach{ item =>
    (1 to 100).par.foreach{ k =>
      val itemCopy = new MyItem(item)  // that's a copy constructor
      assertTrue("item not found", items.contains(itemCopy))
    }
  }
}
我试着做了一系列的例子


Scala有最多4个元素的for设置,而不是使用
HashSet
。我希望创建一个更大的集合或显式地使用
HashSet
应该足以使它失败。但是比较副本的
hashCode
更简单:
assertTrue(“hashCode未实现”,itemCopy.hashCode==item.hashCode)
。如果失败,则合同已经破裂(假设
itemCopy==item
)。

就是这样。我测试了超过4个项目,如果少于4个项目,则使用HashMap进行测试,并且错误被复制。狡猾的