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...
  • Вопрос задан
  • 1831 просмотр
Решения вопроса 1
@red-barbarian
Просто поучительный пример.
Вам нужно протестировать класс. Что это значит? Протестировать его поведение, хотя бы основное. Т.е. желательно все методы которые могут использовать. Как у черного ящика. (скрытые не тестируем и можно не тестировать getter&setter).
Как это сделать?
Вы добавили один метод getFurst(). Вероятно, для тестирования. Но первым элементов не должна ограничиваться проверка. Поэтому нужен скорее метод getItem(int); Это приводит к изменению интерфейса вашего класса (замена не нужного метода нужным)
Сделали изменения, протестировали. Ок.
Далее пишете тест на insert. Несколько. И в конце у вас выскакивает исключение. Индекс превышает размер массива. Опа. Вы должны либо явно описать этот случай в документации (генерацию исключения), либо что-то еще сделать. Указать пользователю на этот скользкий случай.

Далее. Есть метод display
Как его протестировать автоматически? Никак. Это наводит на мысль "что-то не так". Не так, скорее потому, что этот метод не должен быть в этом классе. класс занимается сортировкой. Выводом на экран должен заниматься другой класс. Если вдруг понадобиться поменять вывод, то вам придется ковырять класс который уже работает и протестирован. И вы будете лапать снова весь код, с риском дернуть что-то что скрыто поменяет корректную работу.
Дисплей в другой класс.
итак. убрали getFirst. display. добавили getItem.
класс хорошо тестируется. и более удобный интерфейс.
Т.е. вывод из всего: Тестируемость класса зависит от хорошего интерфейса. Требует этого.
Пригодный к тестированию класс практически всегда (чаще всего) это класс который будет легко использовать. Класс который трудно протестировать, чаще всего трудно будет использовать.
Примерно так.
Конкретно по теме.
Просто по коду тестов, вопросов нет. Вопрос про тестирование класса.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
DrNefario
@DrNefario
Пришел, увидел, решил!
Вы хотите проверить правильность работы сортировки только через первое число в массиве? А если результатом сортировки будет "1 10 5 7 2 5", "1 5 7 10 2" или даже "1 2 5 10 7"? Это все разве верно?
Написание юнит теста у вас хорошее. Проверка условия отсортированности не правильная.
Ответ написан
lxsmkv
@lxsmkv
Test automation engineer
по коду вообще не видно где проводится сортировка. Видно что проверяется что первый вставленный в массив элемент имеет то же значение что и первый элемент массива. Это совсем не то что мы хотим проверить.
Правильно например было бы проверять пары элементов на условие Xn <= Xn+1. Но опять же сперва нужно тест настроить т.е. создать неотсортированый массив, применить к нему сортировку и проверить результат.
Ответ написан
leVenTel8
@leVenTel8 Автор вопроса
Пристовучий Юнец
ниже ссылка на исходник, как мне реализовать JUnit тест к нему, если разбираетесь не проходите мимо плиз =)
помогите нубу разобраться, я понимаю про что говорят ребята сверху, что я проверяю только первое значение, а надо проверять весь массив, но как это реализовать в юнит тесте не знаю =)
P.S. надеюсь найдется гуру, который даст ответ или тыкнет куда посмотреть или чего почитать

https://github.com/leVenTel8/SortirovkaVstavkoi/bl...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы