- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是使用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/
我的意图是使用 the API 中描述的 assertArrayEquals(int[], int[]) JUnit 方法用于验证我类里面的一种方法。 但是 Eclipse 向我显示了它无法识别这种方
我想比较两个对象数组。 但是没有找到适合该方法的方法,因为它不接受 String、Integer 等以外的对象。 我已经覆盖了数组对象的 Equals 方法。 但是我如何将数组传递给方法呢? Asse
我想测试生成用于作为 UDP 数据包发送的字节数组的代码。 虽然我无法重现测试中的每个字节(例如随机字节、时间戳),但我想测试我可以预先确定的字节。 是否可以使用 JUnit 4.8(和 Mockit
这个问题已经有答案了: Using assertArrayEquals in unit tests (4 个回答) 已关闭 8 年前。 我在 java 中的assertArrayEquals 遇到问题
assertArrayEquals 不适用于用户定义的类。 我有 User 类,它仅具有 name 属性。当我为 User 类创建数组对象(实际和预期)并尝试使用 assertArrayEquals
测试这段代码时: public static int maxRowAbsSum(int[][] array) { int[][] maxRowValue = {
我的设置: Netbeans 6.7 Java6 JUnit 4.5 added as the Test libraries 当我尝试传入两个类数组(转换为 Object[])时,我收到错
在 Junit4 中似乎有 Assert.assertArrayEquals() 方法用于除 double 之外的所有原语,例如 Assert.assertArrayEquals(int[] expe
我是一名优秀的程序员,十分优秀!