2012-12-10 121 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