2012-12-10 52 views
0

在类A中的isSorted()实例方法有一个错误:JUnit的测试方法使用断言

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(),这将因为这个错误的失败,但将通过当错误是固定的。 (假设没有定义设置()方法) 这就是答案:

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

首先哪里是错误的我似乎没有,可以到位于它。 其次,它不是assertTrue(haha.isSorted) ,因为当它的assertFalse它会通过,因为数组是降序,因此isSorted将返回false,并且assertFalse(false)将返回true,因为assertTrue(false)将返回false。

回答

0

该错误是上线

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

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

assertFalse声明检查isSorted()方法返回给定数组{2,1}false。方法isSorted()检查没有条目小于前一条目(相反,每个条目大于或等于前一条目)。在该示例中,它将返回false,因为索引0处的2大于1索引1。因此,assertFalse是正确的断言。

你也可以这样测试(注意倒序为array)。

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

我明白了,但assertFalse部分呢? – cloud9resident