Напишите тест JUnit для метода двоичного поиска с Comparable [] - PullRequest
0 голосов
/ 29 января 2020

Обратите внимание, что я новичок

Я пытаюсь написать набор тестов для следующего кода:

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


    }

Как вы можете видеть Я написал логи c для моего первого теста, и он возвращает правильный результат. Тем не менее, я не могу понять, как переписать его как тест JUnit таким образом, чтобы я мог также написать дополнительные тесты (такие как тест верхней границы массива).

Я не уверен, Я должен использовать Assert или assertArrayEquals. Я никогда не использовал JUnit раньше и, возможно, пропускаю что-то относительно простое.

Ответы [ 2 ]

1 голос
/ 29 января 2020

Хорошее начало. Просто перестань думать о печати, а точнее прямо проверь. Вот ваш первый тест, переписанный для 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.

0 голосов
/ 29 января 2020

Если вы импортировали библиотеку Junit в свой проект.

import org.junit.Assert;

Тогда вы можете легко:

Assert.assertEquals (ожидаемый, фактический);

Где ожидаемое - это значение, которое вы ожидаете от вашего двоичного поиска, а фактическое - это значение, которое должно возвращаться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...