0

A 类中的 isSorted() 实例方法有一个 bug:

public class A {
private int[] a;
public A(int[] a) { this.a = a; }

/** Return true if this A object contains an array sorted
* in nondecreasing order; else false. */

  public boolean isSorted() {
    for(int i=1; i<a.length-1; i++) {
    if(a[i] < a[i-1]) return false;
    }
  return true;
  }
}

编写一个 JUnit 测试方法 testIsSorted(),它会因为这个 bug 而失败,但当 bug 修复后会通过。(假设没有定义 setUp() 方法。)这是答案:

public void testIsSorted() {
int[] array = {2, 1};
A haha = new A(array);
assertFalse(haha.isSorted);
}

首先,错误在哪里,我似乎无法找到它。其次,它不应该是 assertTrue(haha.isSorted) 因为当它的 assertFalse 它将通过,因为数组是按降序排列的,因此 isSorted 将返回 false 并且 assertFalse(false) 将返回 true where-as assertTrue(false) 将返回错误的。

4

1 回答 1

0

错误已上线

for(int i=1; i<a.length-1; i++) {

由于数组索引从 0 开始,所以定义i应该是int i=0,而不是1。索引1指向数组的第二个元素。

assertFalse语句检查该isSorted()方法是否返回false给定数组{2,1}。该isSorted()方法检查没有条目小于前一个(相反,每个条目大于或等于前一个)。在示例中,它将返回false,因为2at index0大于1at index 1。因此,assertFalse对于本案,这是正确的断言。

您也可以像这样进行测试(注意 的相反顺序array)。

public void testIsSorted() {
    int[] array = {1, 2};
    A haha = new A(array);
    assertTrue(haha.isSorted());
}
于 2012-12-10T07:18:02.000 回答