我们如何测试数组 returns 是否具有不同的长度?
How can we test if an array returns with different length?
我想测试一个以签名 int[] myMethod(int[] array, int removedElement)
作为参数的方法。
如果元素在数组中,则该方法应删除该元素。因此,该方法可能能够 return int[]
与 array.length - 1
.
assertArrayEquals()
不确认 returned 数组的长度是否不同。
assertNotEquals()
不合适,因为该方法可能会错误地删除一个以上的元素。
如何测试此方法?
有两个方面可以断言:
- 数组的长度
- 数组的内容
的确,前者将与后者一起进行隐式测试,但我更愿意显式地进行测试。
这很简单:存储输入的长度并将其与输出 assertEquals()
进行比较。
对于后者,您采用输入数组 (new[] { 5, 6 }
) 和输出 (new[] { 5 }
),然后使用 assertArrayEquals()
将输出与您的方法的结果进行比较,给定输入和参数 6
.
通过查看 JUnit 文档,我找到了 assertEquals(long, long)
。你应该能够做这样的事情:
Assert.assertEquals("The array length is not what was expected!", (long) array.length - 1, (long) modifiedArray.length);
当然,假设您将修改后的数组保存在 modifiedArray
变量中。
(我几乎没有使用 JUnit 的经验,所以我可能完全错了。如果我错了,请告诉我。)
我仍然会使用 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));
}
我想测试一个以签名 int[] myMethod(int[] array, int removedElement)
作为参数的方法。
如果元素在数组中,则该方法应删除该元素。因此,该方法可能能够 return int[]
与 array.length - 1
.
assertArrayEquals()
不确认 returned 数组的长度是否不同。
assertNotEquals()
不合适,因为该方法可能会错误地删除一个以上的元素。
如何测试此方法?
有两个方面可以断言:
- 数组的长度
- 数组的内容
的确,前者将与后者一起进行隐式测试,但我更愿意显式地进行测试。
这很简单:存储输入的长度并将其与输出 assertEquals()
进行比较。
对于后者,您采用输入数组 (new[] { 5, 6 }
) 和输出 (new[] { 5 }
),然后使用 assertArrayEquals()
将输出与您的方法的结果进行比较,给定输入和参数 6
.
通过查看 JUnit 文档,我找到了 assertEquals(long, long)
。你应该能够做这样的事情:
Assert.assertEquals("The array length is not what was expected!", (long) array.length - 1, (long) modifiedArray.length);
当然,假设您将修改后的数组保存在 modifiedArray
变量中。
(我几乎没有使用 JUnit 的经验,所以我可能完全错了。如果我错了,请告诉我。)
我仍然会使用 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));
}