gpt4 book ai didi

java - 如何对类进行单元测试以检查它是否可以在 Set 或 Map 中使用(即 contains 始终有效)

转载 作者:行者123 更新时间:2023-11-30 03:14:46 26 4
gpt4 key购买 nike

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

问题是简单,该类没有实现“hashCode”(但它有equals)。微妙之处在于它实际上在大多数情况下都有效:我只是在运行一些并发代码时才发现错误。

我现在的问题是,我想进行一个单元测试,断言此类可以在 Set/Map 中可靠地使用(即 .contains 有效),但我无法重现漏洞。

正如我所说,几乎所有时候它都有效。我尝试创建一组由几个实例组成的集合,然后并行运行多次 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))
}
}
}

最佳答案

I tried to make a Set of a couple of instances

Scala 有 specialized representations for 设置最多 4 个元素,而不是使用 HashSet。我希望制作一个更大的集合或显式使用 HashSet 应该足以使其失败。但比较简单的是比较副本的 hashCode:assertTrue("hashCode not Implemented", itemCopy.hashCode == item.hashCode)。如果失败,则合约已被破坏(假设 itemCopy == item)。

关于java - 如何对类进行单元测试以检查它是否可以在 Set 或 Map 中使用(即 contains 始终有效),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32904734/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com