如何在测试用例中处理Set的随机顺序?

use*_*911 1 java unit-testing

在我的测试用例中,我使用assertEquals()进行单元测试.问题是这个断言的值来自HashSet,其中顺序是随机的.因此,每次运行测试用例时,由于HashSet的字符串表示形式值不同,我的断言可能会失败.

为了解决这个问题,我想在我的代码中使用LinkedHashSet,但这似乎不是一个有效的解决方案,因为LinkedHashSet的选择只是为了适应一些测试用例.

这是单元测试中的常见情况吗?

Bar*_*ers 6

不要比较toString()a HashSet<T>,而是将它与另一个(预期的)进行比较HashSet<T>.

以下测试将成功:

@Test
public void test() {

    Set<Integer> set = new HashSet<Integer>(Arrays.asList(2, 1, 3));
    Set<Integer> expected = new HashSet<Integer>(Arrays.asList(3, 2, 1));

    assertEquals(set, expected);
}
Run Code Online (Sandbox Code Playgroud)