Задать вопрос
leVenTel8
@leVenTel8
Пристовучий Юнец

Что такое JUnit тесты и с чем они проводятся?

всем привет, в первый раз сюда пишу, поэтому особо не пинайте =)
в общем проблема такая, не понимаю как проводятся JUnit тесты с алгоритмами сортировки (и проводятся ли они вообще с сортировкой?)
В интернете, есть банальный пример на юнит-тест метода сложения, да с этим все ясно.
На основе этого примера сложения сделал юнит-тест сортировки в котором сначала вносил элементы в массив, затем делал сортировку
и
@Test 
public void testInsert() { 
ArrayIns arrayIns = new ArrayIns(10);
arrayIns.insert(5); 
arrayIns.insert(7); 
assertEquals(5,arrayIns.getFirst()); // сравнение ожидаемого результата с возвращаемым значением

на что мне на собеседовании сказали, что это хрень и не правильно

Так что вопрос такой =) как делать JUnit тесты и с чем их проводить,
поделитесь если кто знает ссылкой на сие великое для меня знание,
а то гуглю и натыкаюсь на один и тот же юнит-тест с сложением
P.S. Всем добра
мой гит: https://github.com/leVenTel8/SortirovkaVstavkoi/bl...
  • Вопрос задан
  • 1835 просмотров
Подписаться 3 Оценить 1 комментарий
Решение пользователя Сергей К ответам на вопрос (4)
@red-barbarian
Просто поучительный пример.
Вам нужно протестировать класс. Что это значит? Протестировать его поведение, хотя бы основное. Т.е. желательно все методы которые могут использовать. Как у черного ящика. (скрытые не тестируем и можно не тестировать getter&setter).
Как это сделать?
Вы добавили один метод getFurst(). Вероятно, для тестирования. Но первым элементов не должна ограничиваться проверка. Поэтому нужен скорее метод getItem(int); Это приводит к изменению интерфейса вашего класса (замена не нужного метода нужным)
Сделали изменения, протестировали. Ок.
Далее пишете тест на insert. Несколько. И в конце у вас выскакивает исключение. Индекс превышает размер массива. Опа. Вы должны либо явно описать этот случай в документации (генерацию исключения), либо что-то еще сделать. Указать пользователю на этот скользкий случай.

Далее. Есть метод display
Как его протестировать автоматически? Никак. Это наводит на мысль "что-то не так". Не так, скорее потому, что этот метод не должен быть в этом классе. класс занимается сортировкой. Выводом на экран должен заниматься другой класс. Если вдруг понадобиться поменять вывод, то вам придется ковырять класс который уже работает и протестирован. И вы будете лапать снова весь код, с риском дернуть что-то что скрыто поменяет корректную работу.
Дисплей в другой класс.
итак. убрали getFirst. display. добавили getItem.
класс хорошо тестируется. и более удобный интерфейс.
Т.е. вывод из всего: Тестируемость класса зависит от хорошего интерфейса. Требует этого.
Пригодный к тестированию класс практически всегда (чаще всего) это класс который будет легко использовать. Класс который трудно протестировать, чаще всего трудно будет использовать.
Примерно так.
Конкретно по теме.
Просто по коду тестов, вопросов нет. Вопрос про тестирование класса.
Ответ написан