检查方法是否正确

时间:2014-04-13 19:10:04

标签: java arrays

我有一个方法以这种方式完成方法:

public int get(int i) throws ArrayIndexOutOfBoundsException {
    if(i < numElements)
        return elements[i];
    else 
        throw new ArrayIndexOutOfBoundsException("");
}

现在我必须确保此方法有效。 我做了一个测试来测试长度为0的数组的get方法。 所以主要是我写道:

    try {
      IntSortedArray r3 = new IntSortedArray(0); //I create an array of length 0
      if( **???** ) {
            System.out.println("OK");
        }
        else {
            System.out.println("FAIL");
        }
    } catch(Exception ecc) {
        System.out.println(ecc + " FAIL");
    }

我将if作为if的条件?感谢


IntSortedArray类:

private int[] elements; 
private int numElements; 

public IntSortedArray(int initialCapacity) {
    elements = new int[initialCapacity];
    numElements = 0;
    System.out.println("Lunghezza dell'array: " + elements.length);
}

2 个答案:

答案 0 :(得分:1)

你可以做到

try {
    IntSortedArray r3 = new IntSortedArray(0);
    r3.get(0);
    fail();
} catch(ArrayIndexOutOfBoundsException expected) {
}

答案 1 :(得分:0)

好。所以你在这里测试了至少两件不同的东西:

  • 如果可以合理地构造对象,
  • 如果您可以从对象中检索元素的大小。

由此,给定您的构造函数,您可以构造具有非负数的对象,以及负数。此外,您还可以检索数组边界中的非负元素,超出数组边界的非负元素以及数组的负元素(绝对超出边界)。

这里有大约五个测试用例。我将使用JUnit作为示例来测试您尝试从包装数组中提取元素的情况,并且它已超出范围。顺便通过,因为你只做了一半的检查;尝试索引到一个等于长度的数组位置也超出范围。

// Test will pass due to exception being thrown.
@Test(expected = ArrayIndexOutOfBoundsException.class)
public void getWithElementOutOfBounds() {
    IntSortedArray r3 = new IntSortedArray(0);
    rt.get(0);
}

使用expected注释的@Test部分,您可以期望抛出某些异常,而无需提供条件或try-catch块。