所以,我试图为我正在做的Java项目编写一些测试用例,我决定将它们移动到自己的函数中,并使用测试函数的参数在它们之间进行选择,而不仅仅是正如我现在所做的那样,使用注释和取消注释代码。但是,我遇到了障碍:有问题的代码涉及数组变量的初始化,如果我尝试在if-else语句中初始化它们,那么稍后其他代码段由于范围而无法看到它们的问题。此外,在Java中,数组具有固定大小,并且一些测试用例涉及不同大小的数组(包括空数组),因此简单地创建数组之前不起作用。
这是我已经尝试过的代码(arrayGen是一个创建n个元素的整数数组的函数,伪随机值位于下限和上限之间,包括在内)。请注意,为了更改我正在运行的测试用例,我需要注释掉当前的测试用例并取消注释我想要运行的测试用例;如果可能的话,我想用一系列if-else if-else语句替换它。
System.out.println("Unsorted:");
int[] unsorted = arrayGen(n,lower,upper);
//sorted array:
//int[] unsorted = new int[n];
//for (int i=0;i<n;i++)
//{
// if (lower+i<upper)
// {
// unsorted[i]=lower+i;
// }
// else unsorted[i]=upper;
//}
//reverse sorted array:
//int[] unsorted = new int[n];
//for (int i=0;i<n;i++)
//{
// if (upper-i>lower)
// {
// unsorted[i]=upper-i;
// }
// else unsorted[i]=lower;
//}
//array of static numbers:
//int[] unsorted = arrayGen(n,upper,upper);
//empty array:
//int[] unsorted = arrayGen(0,lower,upper);
有没有办法解决这个问题,并且有一个更简洁的代码版本,或者我将不得不坚持只是评论和取消注释我想要使用的测试用例?
也许这可以给你一个想法。
int[] unsorted = makeTestData("random");
private int[] makeTestData(String type, int n, int lower, int upper){
switch(type){
case "random": return arrayGen(n,lower,upper);
case "static": return arrayGen(n, upper, upper);
case "empty": return new int[0];
case "sorted":
int[] toSort = arrayGen(n, lower, upper);
Arrays.sort(toSort);
return toSort;
default: throw new IllegalArgumentException(type);
}
}
如果您遇到有关重新定义的变量的范围问题,请尝试将事物移动到它们自己的独立函数中。
但严重的是,尝试使用JUnit等已建立的测试框架之一。它们为您提供了许多“样板”内容,可以免费运行并报告测试。