JUnit

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

В Java для автоматического тестирования используется утилита JUnit, не входящая в JDK, но интегрированная в NetBeans.

Для написания теста для некоторого класса нужно создать новый класс. Как правило, имя класса - название класса которого тестируют и в конце добавляют Test. Импортировать туда @org.junit.Text

Методы начинаются на assert. Примет: assertTrue( логическое выражение ) - проверяет что логическое выражение истинно. assetEquals("Сообщение, что сломалось", t1, t2); проверяет эквивалентность объектов t1 и t2. При этом assert могут содержать комментарий, выводимый при провале теста.

Есть разные версии JUnit и версии меньше JUnit4 не могли использовать аннотации. Мы рассмотрим JUnit4.

Отличие JUnit4 от более ранних версий - совсем необязательно тестирующий класс наследовать от junit.framework.TestCase, но каждый метод, который проводит тестирование надо пометить аннотацией @Test.

Метод, проводящий тестирование, должен быть Public, не должен иметь параметров и должен возвращать void.

В классе, не обязательно все методы, проводящий тестирование, помечать аннотацией @Test.

Кроме методов assert... можно вызвать fail, показывающий что тестирование не пройдено.

Тестирование можно выполнять из программы при помощи JUnitCore

Также можно использовать аннотации @Before и @After, используемые для инициализации перед тем как выполнять тест.

Тесты можно выполнять из командной строки, предварительно скомпилировав через javac -cp java -cp .: classForTest....

Как правило можно обойтись assertTrue, Но есть и другие методы

assertNotNull;

assertArrayEquals;

assertEquals;

assertFalse;

assertNotSame - указатели указывают на разные объекты

assertNull

assertThat

...

Можно еще добавить перед @Test параметр expected @Test(exptected="Исключение") и если тестируемая программа выкинет исключение в exptected - все хорошо.

Иногда хочется проверить что программа не будет долго выполняться, за это отвечает параметр timeout: @Test(timeout=100)

assertEquals переопределен для объектов типа double так как их надо сравнивать по особому.

public static void assertEquals(String message, duble exptecxted, double actual, dobule delta)

assertArrayEquals - проверяет что объекты массивов совпадают.