System.currentTimeMillis 在 Eclipse 中的 Junit 测试中无法正常工作

System.currentTimeMillis not working properly in Junit Test in Eclipse

我正在 Eclipse 中使用 Junit5 测试新的插入排序。我已经编写了其他三个测试,它们都通过了,没有出现错误。我想在 test04 中测试的是,插入排序对已排序的 int[] 进行排序所花费的时间是否小于对完全向后排序 int[].[=24 所花费的时间=]

这是我的代码:

@Test
void test04() {
        // Let's test if sorting an already sorted array takes less time than sorting a backwards one

        int[] sorted = {1, 2, 3, 4, 5, 6, 7, 8, 9};
        int[] backwards = {9, 8, 7, 6, 5, 4, 3, 2, 1};

        long start = System.currentTimeMillis();
        InsertionSort.Sort(sorted);
        long sortedTime = System.currentTimeMillis() - start;

        start = System.currentTimeMillis();
        InsertionSort.Sort(backwards);
        long backwardsTime = System.currentTimeMillis() - start;

        System.out.println(sortedTime);
        System.out.println(backwardsTime);
        System.out.println(System.currentTimeMillis());

        assert(backwardsTime > sortedTime);
}

问题是我的计时机制(使用System.currentTimeMillis())根本不起作用!这是控制台输出:

0
0
1587044842939

sortedTimebackwardsTime等于0!所以 test04 失败了,因为 0 不大于 0。有趣的是,当我打印出 System.currentTimeMillis() 时,它给了我一个看起来很正常的数字。我想知道这是怎么回事?这是一个错误吗?难道我做错了什么?

欢迎任何帮助!

两个输入大小都非常小,因此很可能花费不到 1 毫秒。您可以使用 System.nanoTime 以纳秒为单位测量时间。

这可能需要不到一毫秒的时间才能完成。使用 System.nanoTime 来获取纳秒。

        long start = System.nanoTime();

        InsertionSort.Sort(sorted);

        long sortedTime = System.nano() - start;