【问题标题】:Write JUnit Test for binary search method with Comparable[]使用 Comparable[] 为二进制搜索方法编写 JUnit 测试
【发布时间】:2020-01-30 01:05:27
【问题描述】:

请注意我是初学者

我正在尝试为以下代码编写一组测试用例:

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,可能会忽略一些相对简单的东西。

【问题讨论】:

    标签: java junit


    【解决方案1】:

    好的开始。不要再考虑打印了,而是直接验证。这是你的第一个重写为 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。

    【讨论】:

    • 这很有帮助!谢谢你。附加问题:像这样编写单独的测试是最好的形式吗?那么下一个将是 public void testUpperBoundaryOfArray() 并遵循相同的语法/设置?
    • @Giuseppe 取决于您希望如何构建它。用同样的方法断言几次是没有问题的,报告就会干净利落。我宁愿为您认为要测试的特定事物创建方法,例如testEmptyTreeSearch、testFullTree、testExistingElement、testSingleLineTree、testUpperBoundAboveMax、testLowerBoundBelowMax 以及测试用例之间的其他几个,我将围绕您选择的值断言元素
    【解决方案2】:

    如果您在项目中导入了 Junit 库。

    导入 org.junit.Assert;

    那么你就可以轻松了:

    Assert.assertEquals(预期,实际);

    期望值是您对 binarySearch 的期望值,而实际值是应该返回的值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-02-17
      • 1970-01-01
      • 1970-01-01
      • 2019-11-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-31
      • 2013-01-14
      相关资源
      最近更新 更多