Pho*_*int 0 java junit unit-testing
这是使用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};
Run Code Online (Sandbox Code Playgroud)
removeItemWithIndex()从给定索引和返回数组的数组中删除元素.此测试非常有效.
@Test
public void testRemoveItemWithIndex(){
assertArrayEquals(ArrayUtilities.removeItemWithIndex(ONE_D_MATRIX, 4),ONE_D_MATRIX_REMOVED_ONE);}
Run Code Online (Sandbox Code Playgroud)
removeSpecifiedElementInArray()从具有指定值的数组中删除元素并返回数组.此测试仅在写入expilicitly时才有效.所以在这个例子中只有第二个有效.
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});
Run Code Online (Sandbox Code Playgroud)
JUnit说:
java.lang.AssertionError:数组长度不同,expected.length = 8 actual.length = 7
这是一个错误吗?第一种方法为什么第二种方法不起作用呢?
此测试仅在写入expilicitly时才有效.所以在这个例子中只有第二个有效.
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});
Run Code Online (Sandbox Code Playgroud)
这两个调用是相同的,因此它们都应该产生相同的结果.
问题几乎不可避免地出现在你的测试代码中:在你的代码中的某个时刻,在被测试方法调用之前或期间,被称为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);
Run Code Online (Sandbox Code Playgroud)
在进行实际检查之前,前两个断言中的一个将失败.
| 归档时间: |
|
| 查看次数: |
690 次 |
| 最近记录: |