gpt4 book ai didi

java - JUnit 黑盒/白盒测试选择排序?

转载 作者:行者123 更新时间:2023-12-01 13:04:10 25 4
gpt4 key购买 nike

我试图在 SelectionSort 类上理解和实现黑盒/白盒 JUnit 技术,但我无法理解要采取的方向..

下面是我失败的尝试之一..我尝试从我的 SelectionSort 类测试数组的大小,但我的方法 (unsortedArray) 无法识别..

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

}

下面是我提供的 SelectionSort 类。非常感谢任何帮助或指导:)

public class SelectionSort2 {

public static void main(String[] args)
{
int n = 20;
int[] numArray = unsortedArray(n); // re-initialize
printArray(numArray,n);
selectSort2(numArray, n);
printArray(numArray, n);
}


//Generate data for the selection sort array
public static int[] unsortedArray(int n) {
int[] a = new int[n];
for (int index = 0; index < n; index++) {
a[index] = (n - index);
}
return a;
}
//print the array
public static void printArray(int[] data, int n)
{
for (int index = 0; index < n; index++) {
System.out.print(data[index] + " ");
}
System.out.println();
}

public static void selectSort2(int[] data, int n)
{
for (int numUnsorted = n; numUnsorted > 0; numUnsorted--) {
int maxIndex = 0;
for (int index = 1; index < numUnsorted; index++) {
if (data[maxIndex] < data[index])
maxIndex = index;
//swap the element
int temp = data[numUnsorted-1];
data[numUnsorted-1] = data[maxIndex];
data[maxIndex] = temp;

}
}
}
}

最佳答案

黑盒测试可以被设想为输入-输出对。您为程序提供一组输入,然后查看输出是否符合您的预期。

所以在这种情况下,你会得到类似的东西:

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}

并且您可以使用诸如 assertArrayEquals() 之类的方法来检查程序的输出是否符合您的预期。

白盒测试涉及更多一些,因为您正在设计尝试通过代码执行所有可能路径的测试,这意味着白盒测试往往更加特定于实现。老实说,我对白盒测试不是很熟悉,所以我帮不了你太多。我猜想,白盒测试本质上是查看您的代码并查找执行期间可能出现的各种极端情况。不过,您的代码似乎确实非常简单,所以我不确定您可能会遇到哪些黑盒测试尚未涵盖的情况......

对于您给出的具体测试,我认为问题出在这一行:

assertArrayEquals(20, a.unsortedArray(x, 20));

assertArrayEquals() 要么接受两个数组作为参数,要么接受一个 String 和两个数组,其中 String 充当错误消息。我认为您的代码无法编译,因为您传递给它的参数都无效。此外,您似乎没有定义 unsortedArray(int[], int) 方法...您是否打算执行 selectSort2(x, 20)

一旦修复该行,JUnit 测试应该可以工作。注释掉一行至少可以让 JUnit 测试在我的计算机上运行。

还有一件事——您说您想测试 SelectionSort 类中数组的大小。为此,assertTrue() 可能是要使用的方法,但我不确定这样的测试是否有用,因为数组大小无法更改,并且您在任何时候都不会返回新数组.

关于java - JUnit 黑盒/白盒测试选择排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23355246/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com