带断言的JUnit测试方法

时间:2012-12-10 05:22:12

标签: testing junit assertions

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

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);
}

首先是错误的地方,我似乎找不到它。 其次不应该断言(haha.isSorted) 因为当它的assertFalse它会传递,因为数组是降序,因此isSorted将返回false而assertFalse(false)将返回true where-as assertTrue(false)将返回false。

1 个答案:

答案 0 :(得分:0)

错误就行了

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

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

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

你也可以这样测试(注意1的反转顺序。)

1