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
sortedTime
和backwardsTime
等于0
!所以 test04
失败了,因为 0
不大于 0
。有趣的是,当我打印出 System.currentTimeMillis()
时,它给了我一个看起来很正常的数字。我想知道这是怎么回事?这是一个错误吗?难道我做错了什么?
欢迎任何帮助!
两个输入大小都非常小,因此很可能花费不到 1 毫秒。您可以使用 System.nanoTime
以纳秒为单位测量时间。
这可能需要不到一毫秒的时间才能完成。使用 System.nanoTime 来获取纳秒。
long start = System.nanoTime();
InsertionSort.Sort(sorted);
long sortedTime = System.nano() - start;
我正在 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
sortedTime
和backwardsTime
等于0
!所以 test04
失败了,因为 0
不大于 0
。有趣的是,当我打印出 System.currentTimeMillis()
时,它给了我一个看起来很正常的数字。我想知道这是怎么回事?这是一个错误吗?难道我做错了什么?
欢迎任何帮助!
两个输入大小都非常小,因此很可能花费不到 1 毫秒。您可以使用 System.nanoTime
以纳秒为单位测量时间。
这可能需要不到一毫秒的时间才能完成。使用 System.nanoTime 来获取纳秒。
long start = System.nanoTime();
InsertionSort.Sort(sorted);
long sortedTime = System.nano() - start;