我们如何测试数组是否以不同的长度返回?

时间:2015-03-05 21:42:07

标签: java unit-testing junit

我想测试一个带有签名int[] myMethod(int[] array, int removedElement)的方法作为参数。 如果数组中的元素,该方法应该删除元素。因此,该方法可能会返回int[] array.length - 1

assertArrayEquals()不确认返回的数组是否有不同的长度。

assertNotEquals()不合适,因为该方法可能被错误删除多个元素。

我该如何测试这种方法?

3 个答案:

答案 0 :(得分:2)

断言有两个方面:

  • 数组的长度
  • 数组的内容

前者将用后者进行隐式测试,但我更愿意明确地这样做。

这很容易:存储输入的长度并将其与assertEquals()的输出进行比较。

对于后者,你接受输入数组(new[] { 5, 6 })和输出(new[] { 5 })并使用assertArrayEquals()来比较输出和方法的结果,给定输入和参数6

答案 1 :(得分:2)

通过JUnit文档,我找到了assertEquals(long, long)。你应该可以这样做:

Assert.assertEquals("The array length is not what was expected!", (long) array.length - 1, (long) modifiedArray.length);

假设您已将修改过的数组保存在modifiedArray变量中,当然。

(我对JUnit几乎没有经验,所以我可能完全错了。如果我是,请告诉我。)

答案 2 :(得分:2)

我仍然使用arrayAssertsEquals进行测试,只需使用new int [] {}

制作输入和预期结果
@Test
public void shrinksArray() {
    assertArrayEquals(new int[] { 2, 3 }, remove(new int[] { 1, 2, 3 }, 1));
    assertArrayEquals(new int[] { 1, 2 }, remove(new int[] { 1, 2, 3 }, 3));
    assertArrayEquals(new int[] { 1, 3 }, remove(new int[] { 1, 2, 3 }, 2));
    assertArrayEquals(new int[] { 1, 2, 3 }, remove(new int[] { 1, 2, 3 }, 9));
}

或者,如果你对每次测试的单个断言感到疯狂......

private static final int[] ORIGINAL = new int[] { 1, 2, 3 };

@Test
public void removesFromBeginning() {
    assertArrayEquals(new int[] { 2, 3 }, remove(ORIGINAL, 1));
}

@Test
public void removesFromEnd() {
    assertArrayEquals(new int[] { 1, 2 }, remove(ORIGINAL, 3));
}

@Test
public void removesFromMiddle() {
    assertArrayEquals(new int[] { 1, 3 }, remove(ORIGINAL, 2));
}

@Test
public void doesNotRemoveUnknownItem() {
    assertArrayEquals(ORIGINAL, remove(ORIGINAL, 9));
}