Java 使用Compariable[]为二进制搜索方法编写JUnit测试
请注意,我是初学者 我正在尝试为以下代码编写一组测试用例:Java 使用Compariable[]为二进制搜索方法编写JUnit测试,java,junit,Java,Junit,请注意,我是初学者 我正在尝试为以下代码编写一组测试用例: int binarySearch(Comparable[] objArray, Comparable searchObj) { int low = 0; int high = objArray.length - 1; int mid = 0; //iterative binary search algorithm while (low <= hig
int binarySearch(Comparable[] objArray, Comparable searchObj) {
int low = 0;
int high = objArray.length - 1;
int mid = 0;
//iterative binary search algorithm
while (low <= high) {
mid = (low + high) / 2;
if (objArray[mid].compareTo(searchObj) < 0) {
low = mid + 1;
} else if (objArray[mid].compareTo(searchObj) > 0) {
high = mid - 1;
} else {
return mid;
}
}
//return target index position
if (objArray[mid].compareTo(searchObj) > 0) {
return mid;
} else
return mid + 1;
}
@Test
public void testBinarySearch() {
//Test for lower boundary of array
BinarySearch ob = new BinarySearch();
Comparable[] array = {10, 20, 30, 40, 50};
int result = ob.binarySearch(array, 5);
System.out.println("Index position should return 0. Result is: " + result);
}
如您所见,我已经为我的第一个测试用例编写了逻辑,它正在返回正确的结果。然而,我似乎不知道如何将它重写为JUnit测试,这样我还可以编写额外的测试,比如数组的测试上限
我不确定是应该使用Assert还是assertArrayEquals。我以前从未使用过JUnit,可能忽略了一些相对简单的东西 良好的开端。不要再考虑打印,而是直接验证。这是您的第一个重写到junit的测试:
@Test
public void testLowerBoundaryOfArray() {
BinarySearch ob = new BinarySearch();
Comparable[] array = {10, 20, 30, 40, 50};
int result = ob.binarySearch(array, 5);
Assert.assertEquals("Index position should be as expected", 0, result);
}
注意,我还以测试的内容命名测试,而不是在注释中说明
Assert.assertEquals有两个或三个参数,第一个是可选的测试步骤说明。第二个是期望,第三个是实际结果。有人可能会说,在您的案例中,并不需要期望消息,但我将其包含在API的完整演示中。如果您在项目中导入了Junit库 导入org.junit.Assert 然后你可以轻松地: Assert.assertEqualsexpected,实际
其中expected是您从binarySearch中期望的值,实际值是应该返回的值。这非常有用!非常感谢。附加问题:这样编写单独的测试是最好的形式吗?那么下一个将是public void testUpperBoundaryOfArray,并遵循相同的语法/设置?@Giuseppe取决于您想要如何构造它。在同一个方法中断言几次是没有问题的,报告将以干净的形式出现。我更愿意为您认为要测试的特定事物创建方法,例如TestEmptyTreech、testFullTree、testExistingElement、testSingleLineTree、TestUpperBoundOverMax、testLowerBoundBelowMax,以及在两个测试用例之间创建更多的方法,在这些测试用例中,我会围绕您选择的值断言元素