Java JUnit黑盒/白盒测试选择排序?
我试图在SelectionSort类上理解并实现blackbox/whitebox JUnit技术,但我很难理解应该采取什么方向 下面是我失败的一次尝试。我尝试从SelectionSort类中测试数组的大小,但无法识别我的方法(unsortedArray)Java JUnit黑盒/白盒测试选择排序?,java,junit,black-box-testing,white-box-testing,Java,Junit,Black Box Testing,White Box Testing,我试图在SelectionSort类上理解并实现blackbox/whitebox JUnit技术,但我很难理解应该采取什么方向 下面是我失败的一次尝试。我尝试从SelectionSort类中测试数组的大小,但无法识别我的方法(unsortedArray) @Test public void testUnsortedArray() { int n = 20; int[] x = new int[n]; for (int i = 0; i < 20; i++) {
@Test
public void testUnsortedArray() {
int n = 20;
int[] x = new int[n];
for (int i = 0; i < 20; i++) {
x[i] = (n);
n--;
i++;
}
SelectionSort2 a = new SelectionSort2();
assertArrayEquals(20, a.unsortedArray(x, 20));
}
@测试
public void testUnsortedArray(){
int n=20;
int[]x=新的int[n];
对于(int i=0;i<20;i++){
x[i]=(n);
n--;
i++;
}
SelectionSort2 a=新的SelectionSort2();
assertarayequals(20,a.unsortedArray(x,20));
}
下面是我提供的SelectionSort类。非常感谢您的帮助或指导:)
公共类选择或2{
公共静态void main(字符串[]args)
{
int n=20;
int[]numArray=unsortedArray(n);//重新初始化
printArray(纽马拉伊,n);
选择器2(纽马拉伊,n);
printArray(纽马拉伊,n);
}
//为选择排序数组生成数据
公共静态int[]未排序的数组(int n){
int[]a=新的int[n];
对于(int index=0;index0;NumunSorded--){
int maxIndex=0;
对于(int-index=1;index
'assertArrayEquals'方法用于检查2个阵列。但是您的第一个参数20不是一个数组对象,这可能是失败的原因。黑盒测试可以想象为输入输出对。你给你的程序一组输入,看看输出是否符合你的期望
所以在这种情况下,你会有这样的结果:
input: {5, 3, 1}; expected output: {1, 3, 5}
input: {9, 7, 5, 6, 8, 34, 3, 6}; expected output: {3, 5, 6, 6, 7, 8, 9, 34}
input: {} expected output: {}
input: {1, 3, 5} expected output: {1, 3, 5}
您可以使用类似于assertarayequals()
的方法来检查程序的输出是否符合预期
白盒测试更为复杂,因为您正在设计的测试试图通过代码执行所有可能的路径,这意味着白盒测试往往更具体于实现。老实说,我对白盒测试不是很熟悉,所以我帮不了你多少忙。我猜,针对这一点的白盒测试基本上是查看代码,并查找在执行过程中可能出现的各种角落情况。虽然您的代码看起来非常简单,但我不确定您可能会遇到哪些黑盒测试尚未涵盖的情况
对于您进行的具体测试,我认为问题在于:
assertArrayEquals(20, a.unsortedArray(x, 20));
assertarayequals()
要么将两个数组作为参数,要么将一个String
和两个数组作为错误消息。我认为您的代码不会编译,因为您传递给它的两个参数都无效。此外,您似乎没有定义unsortedArray(int[],int)
方法。。。您是否打算执行选择SORT2(x,20)
一旦修复了该行,JUnit测试就应该可以工作了。评论说,至少有一行代码允许JUnit测试在我的计算机上运行
还有一件事——您说过要在SelectionSort类中测试数组的大小。为此,
assertTrue()
可能是要使用的方法,但我不确定这样的测试是否有用,因为数组大小无法更改,而且您在任何时候都不会返回新数组。我建议您列出一个您希望类能够执行的操作列表。对于这些要求中的每一项,列出可能适用的不同情况。然后,对于需求和环境的每个组合,用Java代码编写类满足需求的含义,并将其构建为测试方法。最后,您应该使用一组测试方法,每个测试方法在一种情况下对类的行为断言一件事。
assertArrayEquals(20, a.unsortedArray(x, 20));