此测试值是否会在系统中产生感染?

时间:2015-04-16 16:28:32

标签: java unit-testing error-handling

我的测试用例值为:

List<String> string = new LinkedList();
string.add("Hello"); string.add("hi"); string.add("bye");

测试以下方法:

// Will return longest length of a string within the list. 
public int maxLengthOfString(List<String> listOfStrings) {
    int maxLength - Integer.MIN_VALUE;
    int index = 0;
    if (listOfStrings != null) {
        while(index < strings.size()){
            if(strings.get(index).length() > maxLength){
                maxLengthOfString = listOfStrings.get(index).length();
                index++;
            }
            index++;
        }
    }
}
return maxLengthOfString;

我认为感染了R.I.P. model意味着程序在执行期间的某个时刻处于无效状态。上面的列表仍将跳过索引1,但它不处于无效状态,因为该方法的目的是检查最长的String,而索引1不是最长的。

我的教授说这是一种感染,因为索引1被跳过了。

对于以下网页,这是否是感染:http://www.ironiacorp.com/apps/wiki/testing/RIP_model

1 个答案:

答案 0 :(得分:0)

它现在已经坏了,因为它依赖于两个条目而不是一个条目。这就是for-each循环不仅会短得多,而且也不会出错。

        if(strings.get(index).length() > maxLength){
            maxLengthOfString = listOfStrings.get(index).length();
            index++; // skip an entry.
        }
        index++;

你可以说第一行index++;是错误的,但是此时系统不保证是不正确的,对代码的微小改动表明它可以在不改变的情况下得到纠正。

        if(strings.get(index).length() > maxLength){
            maxLengthOfString = listOfStrings.get(index).length();
            index++; // skip an entry.
        } else
            index++;

恕我直言,代码中没有任何内容表明后来的代码无法扭转“#34;损害”。因此我不同意&#34;在执行有错误的位置后,程序的状态必须是错误的&#34;

你应该写

public int maxLengthOfString(List<String> listOfStrings) {
    int maxLength = Integer.MIN_VALUE;
    if (listOfStrings != null)
        for(String s : listOfStrings)
            if (maxLength < s.length())
                maxLength = s.length();
     return maxLength;
}