构造一个尽可能简单的程序P(包含两个Fualts: F1和F2),同时构造t1, t2和t3,使得
1. t1单独执行到F1并且发现Failure;
2. t2单独执行到F2并且发现Failure;
3. t3同时执行到F1和F2,并且能够对F1产生Error,但没有Failure。//请标明详细注释
import org.testng.annotations.Test;
public class homework1 {
// 构造一个尽可能简单的程序P(包含两个Fualts: F1和F2),同时构造t1, t2和t3,使得
// 1. t1单独执行到F1并且发现Failure;
// 2. t2单独执行到F2并且发现Failure;
// 3. t3同时执行到F1和F2,并且能够对F1产生Error,但没有Failure。//请标明详细注释
public int sum(int[] nums,int length){//传入-1就求总和,传入自然数就求数组前length个数的和
int s = 0;
for(int i=0;i<(length==-1?(nums.length-1):(length));i++){//F2: 求和 for循环错误,求总和nums.length-1漏算了最后一个数,求前length个数正常
s+=nums[i];
}
return s;
}
public void sort(int[] arr){//冒泡排序
int temp;
for(int i=1;i<arr.length-1;i++){//F1: 冒泡趟数,本该从0开始,错写为1
for(int j=0;j<arr.length-i-1;j++){
if(arr[j+1]>arr[j]){
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
@Test
public void test() {
int[] a = {5,2,3,1,0,4};
//t1排序
sort(a);
for (int i : a) {
System.out.print(i+" ");//排序,期望输出为5 4 3 2 1 0,实际输出5 3 2 1 0 4,触发了F1,产生了ERROR,并传递到软件外部,观察到失效行为
}
System.out.println();
//t2求总和
System.out.println(sum(a,-1));//求总和期望结果15,输出11,触发了F2,产生了ERROR并传递到软件外部,观察到失效行为
//t3求最大的两个数的和
int[] b = {5,2,4,1,-1,0};
sort(b);//排序后为5,4,2,1,-1,0,执行到F1并对F1产生ERROR,
System.out.println(sum(b,2));//输出9,执行到F2,求前2个数和没有产生ERROR,F1产生的ERROR没有传递到软件外部,输出了正确的结果
}
}