java - JUnit 断言数组在不相等时是相等的

标签 java arrays junit

我有一个正在使用 JUnit 测试的合并排序函数。下面是我的一个测试用例:

@Test
    //test using randomly generated numbers
    public void MergeSortTest002()
    {
        long seed = System.currentTimeMillis();
        Random rng = new Random(seed);
        Integer[] TestArray = new Integer[1000];
        int MAX_VALUE = Integer.MAX_VALUE;

        for(int i=0; i<1000; i++) {
            //this will generate positive and negative numbers from
            // -MAX_VALUE/2 to +MAX_VALUE/2
            Integer newNum = rng.nextInt(MAX_VALUE/2) - MAX_VALUE;
            TestArray[i] = newNum;
        }

        Integer[] correctArray = TestArray;
        Arrays.sort(correctArray);
        MergeSort.mergeSort(TestArray);

        Assert.assertArrayEquals(correctArray,TestArray);
    }

奇怪的是,即使我注释掉调用mergeSort 函数的行,测试仍然通过。

我认为发生了两件事之一: assertArrayEquals 不关心元素的顺序(不太可能),当我将 TestArray 复制到 correctArray,它通过引用进行复制,因此在 correctArray 上调用 Arrays.sort 也是对 TestArray 进行排序。

谁能确认发生了这两种情况中的哪一种,解决方案应该是什么?是否有一个 Assert 可以记住顺序,或者是否有一种方法可以在不编写显式 for 循环的情况下按值而不是引用来复制数组?

最佳答案

问题就在这里:

Integer[] correctArray = TestArray;

您正在将引用 复制到您的数组,而不是数组的内容

要修复,将该行更改为:

Integer[] correctArray = TestArray.clone();

关于java - JUnit 断言数组在不相等时是相等的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10727060/

相关文章:

java - 如何为Cucumber-jvm快速创建测试数据库?

Java:BufferedReader 的替代方案

java - Jboss 7 Firebird 连接

python - 解析推文以将主题标签提取到数组中

java - 测试 IllegalArgumentException 未按预期捕获

java - 为什么我的方法不能正确检测对象是否为空?

java - 在 IntelliJ IDEA 中的上一行和下一行插入的快捷方式(使用 vim 的小 o 和大 O)

Java:将文件读入数组

c - 如何使用动态分配创建结构体的二维数组?

java - 用于验证媒体播放器的android单元测试