gpt4 book ai didi

java - JUnit 的assertArrayEquals() 如何工作?

转载 作者:行者123 更新时间:2023-12-01 16:59:23 24 4
gpt4 key购买 nike

这是使用junit4的测试类。

public class TestArrayUtilities {
static final int[] ONE_D_MATRIX = { 12, 34, 45, 6, 7, 85, 67, 43 };
static final int[] ONE_D_MATRIX_REMOVED_ONE= {12, 34, 45, 6, 85, 67, 43};

removeItemWithIndex() 从给定索引的数组中删除元素并返回数组。这个测试效果非常好。

 @Test
public void testRemoveItemWithIndex(){
assertArrayEquals(ArrayUtilities.removeItemWithIndex(ONE_D_MATRIX, 4),ONE_D_MATRIX_REMOVED_ONE);}

removeSpecifiedElementInArray() 从数组中删除具有指定值的元素并返回数组。该测试仅在明确编写的情况下才有效。因此,在此示例中,只有第二个有效。

assertArrayEquals(ArrayUtilities.removeSpecifiedElementInArray(ONE_D_MATRIX, 7), ONE_D_MATRIX_REMOVED_ONE);
assertArrayEquals(ArrayUtilities.removeSpecifiedElementInArray(new int[] { 12, 34, 45, 6, 7, 85, 67, 43 }, 7), new int[] {12, 34, 45, 6, 85, 67, 43});

JUnit 说:

java.lang.AssertionError: array lengths differed, expected.length=8 actual.length=7

这是一个错误吗?为什么第二种方法不起作用而第一种方法有效?

最佳答案

This test works only if it is written expilicitly. So at this example only second one works.

assertArrayEquals(ArrayUtilities.removeSpecifiedElementInArray(ONE_D_MATRIX, 7), ONE_D_MATRIX_REMOVED_ONE);
assertArrayEquals(ArrayUtilities.removeSpecifiedElementInArray(new int[] { 12, 34, 45, 6, 7, 85, 67, 43 }, 7), new int[] {12, 34, 45, 6, 85, 67, 43});

这两个调用是相同的,因此它们应该产生相同的结果。

问题几乎不可避免地出现在您的测试代码中:在代码中的某个时刻,无论是在调用被测试方法之前还是期间,称为 ONE_D_MATRIX 的数组都会发生变化,这会导致您看到的断言错误。

以下是如何验证这确实是正在发生的事情:添加两个对 assertArrayEquals 的调用,如下所示:

assertArrayEquals(ONE_D_MATRIX, new int[]  { 12, 34, 45, 6, 7, 85, 67, 43 };
int res = ArrayUtilities.removeSpecifiedElementInArray(ONE_D_MATRIX, 7);
assertArrayEquals(ONE_D_MATRIX, new int[] { 12, 34, 45, 6, 7, 85, 67, 43 };
assertArrayEquals(res, ONE_D_MATRIX_REMOVED_ONE);

在进行实际检查之前,前两个断言之一将失败。

关于java - JUnit 的assertArrayEquals() 如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28890053/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com