代码之家  ›  专栏  ›  技术社区  ›  Rajdeep

JUnit assertEquals与HashSet一起失败

  •  0
  • Rajdeep  · 技术社区  · 7 年前

    我在做一些JUnit测试 AddressBook 一直没能完成我的一个测试。以下是测试:

    @Test
    public void parseIndices_collectionWithValidIndices_returnsIndexSet() throws Exception {
        Set<Index> actualIndexSet = ParserUtil.parseIndices(Arrays.asList(VALID_INDEX_1, VALID_INDEX_2));
    
        Index index = Index.fromOneBased(Integer.valueOf(VALID_INDEX_1));
        Index index2 = Index.fromOneBased(Integer.valueOf(VALID_INDEX_2));
        Set<Index> expectedIndexSet = new HashSet<>();
        expectedIndexSet.add(index);
        expectedIndexSet.add(index2);
    
        assertEquals(expectedIndexSet, actualIndexSet);
    }
    

    输出如下:

    Output of running test 这表明他们是平等的,但不知何故,断言不断失败。然后我试着断言2个actualIndexSets(如下所示),看看它们是否能通过测试,但是仍然失败了,结果是相同的,这很奇怪。

    @Test
    public void parseIndices_collectionWithValidIndices_returnsIndexSet() throws Exception {
        Set<Index> actualIndexSet = ParserUtil.parseIndices(Arrays.asList(VALID_INDEX_1, VALID_INDEX_2));
        Set<Index> actualIndexSet2 = ParserUtil.parseIndices(Arrays.asList(VALID_INDEX_1, VALID_INDEX_2));
    
        Index index = Index.fromOneBased(Integer.valueOf(VALID_INDEX_1));
        Index index2 = Index.fromOneBased(Integer.valueOf(VALID_INDEX_2));
        Set<Index> expectedIndexSet = new HashSet<>();
        expectedIndexSet.add(index);
        expectedIndexSet.add(index2);
    
        assertEquals(actualIndexSet2, actualIndexSet);
    }
    

    这里的问题是,有些东西显然是不对的,因为当我断言两组actualIndexSet时它失败了,这两个集合是相同的,因为assert for The Index类工作正常。

    3 回复  |  直到 7 年前
        1
  •  0
  •   Adina Rolea    7 年前

    哈希集覆盖等于;它检查第一个集合是否包含第二个集合的所有内容。

    唯一可能的原因是索引类没有重写equals。 当调用containsAll方法时,它将遍历所有索引元素并检查equals的结果是否为true。

        2
  •  0
  •   Christian    7 年前

    你的问题似乎是 equals Index 班级。

    CollectionUtils.isEqualCollection(expectedIndexSet, actualIndexSet)
    
        3
  •  0
  •   Rajdeep    7 年前
    @Override
    public int hashCode() {
        return zeroBasedIndex;
    }
    

    推荐文章