Попытайтесь думать об этом как о «проверке поведения».Поведение, которое вы ожидаете от вашего класса BinarySearch, заключается в том, что для заданного массива A и элемента E он будет возвращать индекс элемента E в A, если E является элементом A, или -1, если это не так.Очень простая первая попытка тестирования может выглядеть следующим образом:
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayNameGeneration;
import org.junit.jupiter.api.DisplayNameGenerator;
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat;
@DisplayNameGeneration(DisplayNameGenerator.ReplaceUnderscores.class)
class BinarySearchTest {
private BinarySearch<Integer> integerBinarySearch;
@BeforeEach
void setUp() {
integerBinarySearch = new BinarySearch<>();
}
@Test
void returns_index_of_searched_element_when_searched_element_is_in_the_beginning_of_array() {
// given
Integer[] numbers = new Integer[] {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int numberToSearch = 1;
// when
int indexOfSearchedNumber = integerBinarySearch.search(numbers, numberToSearch, 0, numbers.length - 1);
// then
assertThat(indexOfSearchedNumber).isEqualTo(0);
}
@Test
void returns_index_of_searched_element_when_searched_element_is_in_the_end_of_array() {
// given
Integer[] numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int numberToSearch = 10;
// when
int indexOfSearchedNumber = integerBinarySearch.search(numbers, numberToSearch, 0, numbers.length - 1);
// then
assertThat(indexOfSearchedNumber).isEqualTo(9);
}
@Test
void returns_index_of_searched_element_when_searched_element_is_in_the_middle_of_array() {
// given
Integer[] numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
int numberToSearch = 6;
// when
int indexOfSearchedNumber = integerBinarySearch.search(numbers, numberToSearch, 0, numbers.length - 1);
// then
assertThat(indexOfSearchedNumber).isEqualTo(5);
}
@Test
void returns_minus_one_when_element_is_not_in_array() {
// given
Integer[] numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int numberToSearch = 42;
// when
int indexOfSearchedNumber = integerBinarySearch.search(numbers, numberToSearch, 0, numbers.length - 1);
// then
assertThat(indexOfSearchedNumber).isEqualTo(-1);
}
}
Это скажет вам, например, что ваша реализация поиска работает неправильно, когда элемент отсутствует в массиве.Для компиляции этой программы вам нужно добавить зависимости junit5 и assertj в вашу программу.Если вы используете инструмент сборки, такой как gradle, в блок зависимостей в build.gradle необходимо добавить следующие записи:
testImplementation 'org.junit.jupiter: junit-jupiter: 5.4.2'
testImplementation 'org.assertj: assertj-core: 3.12.2'