Junit тесты на простом примере

Давайте рассмотрим как писать junit тесты на простом примере.

Допустим стоит задача, определить, образуют ли 3 точки на плоскости прямоугольный треугольник. Как видим из самой постановки задачи требуется написать по крайней мере 2 класса, Точка и Треугольник.

Так как точка находится на плоскости, для упрощения жизни будем брать дискретные значения, поэтому х и у будут у нас целочисленными. Также в этом классе нам нужен будет метод, который находит расстояние между 2 точками. Как параметр логично будет передавать другую точку. Так как в нее могут передать null нужна первая обработка и выброс исключения. Также точки могут совпадать, обезопасим это проверкой через переопределенный equals & hashCode (см. предыдущие статьи зачем это делать ссылка).

Теперь нам необходимо для начала протетировать наш метод получения расстояния между 2 точками. Для этого создадим Junit Test в папке test (ее надо пометить тестовой). Сам класс теста создается через комбинацию ctrl+shift+T.

Так как у нас могут быть по сути 3 случая (2 ошибки и рабочий вариант), то мы напишем 3 отдельных теста. В первом проверим ожидаемый результат и фактический через матчер is.  Во втором и третьем тесте проверим выброс ошибки, класс ошибки нужно указывать в скобках @Test(expected = MyException.class)

Теперь напишем класс Треугольника у которого есть 3 стороны. Треугольник можно создать через 3 стороны или 3 точки. Но не каждые 3 стороны могут образовать треугольник. Для этого напишем проверки. Если длины сторон не больше 0, то выбрасываем ошибку прямо в конструкторе, потому что мы хотим знать где что-то пошло не так. Если все длины сторон больше нуля, то нужно проверить что каждые 2 стороны в сумме дают больше чем третья сторона (это и есть верный способ проверки существования треугольника в принципе). Если стороны треугольник не могут образовать, то опять бросаем исключение с поясняющим текстом.

В конструкторе через 3 точки вызываем конструктор 3 сторон, передавая длины через метод расчета класса Точка (единственный минус здесь, что могут передать null вместо точек, но NullPointerException сразу покажет где ошибка).

Теперь, когда у нас есть 3 стороны и они образуют треугольник, можно уже проверить, является ли треугольник прямоугольным. Для этого напишем простой метод, который будет перебирать все комбинации сторон. А саму проверку по теореме Пифагора вынесем в собственный метод.

Хорошо, мы написали метод проверки, но его надо протестировать. Для этого опять создадим класс Теста. У нас есть несколько случаев выброса исключения и их надо бы проверить, поэтому для каждого случая написали отдельный тест с ожидаемым выбросом исключения. Метод проверки на прямой угол может вернуть 2 значения, true || false, поэтому мы напишем несколько возможных комбинаций (через стороны и через точки) для каждого случая. Все эти треугольники можно положить в список и назвать соответственно прямоугольные треугольники и непрямоугольные. Пройдя через цикл проверяем значение метода (можно было написать и через список актуальных значений, т.е. положить булевые переменные в список и проверить 2 списка).

На самом деле в этих тестах проверены не все возможные случаи. Но большинство кейсов покрыто.

При написании тестов необходимо учитывать все возможные и невозможные случаи  и в зависимости от полноты тестов можно быть уверенным в том, что методы написаны правильно.

Запись опубликована в рубрике Программирование Java. Добавьте в закладки постоянную ссылку.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *