Unit тестирование с JUnit

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

Шаг 1.

Создадим Maven Project в Intellij IDEA.

Шаг 2.

Для начало нам нужно подключить зависимость JUnit в pom.xml не забываем что для удобства мы используем Maven.

На момент написания данного урока самая новая версия JUnit 4.11

<dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <version>4.11</version>
  <scope>test</scope>
</dependency>

После того как мы добавили JUnit в зависимости мы можем с ней работать.

 

Обязательно проверьте что папка, которая лежит в test/java должна быть зеленым цветом это будет обозначать то что в данной папке лежат тестовые классы и при сборке проекта они не будут собираться в проект.

Если же она не зеленая то заходим в Project Structure(Ctrl+Alt+Shift+S) далее выбираете слева Modules->Sources и указываете что папка test/java будет тестовым ресурсом. Пример на картинке ниже.

 

Шаг 3.

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

public class Calculate {
    public int calA(int a, int b){
        return a+b;
    }
}

Как вы должны видеть этот класс когда тестируете?

1) Вы не знаете, какие манипуляции выполняют методы класса, вы видите метод и знаете что он возвращает, также вы знаете что он делает но не знаете как, а так же вы знаете что метод принимает на вход.

А если быть точней, то вот что видит тестер:

public int calA(int a, int b)

2) Вы должны передать в этот метод всевозможные данные и попытаться сделать так что бы тест завалился, это главная цель тестера.

Шаг 4.

Unit тест с технической стороны — это класс который лежит в тестовом ресурсе и который предназначен только для тестирование логики, а не для использования в production коде.

Пример JUnit теста:

@Test
public void testMultiply() {
   // Тестируемый класс
   MyClass tester = new MyClass();

   // Проверяемый метод
   assertEquals("10 x 5 must be 50", 50, tester.multiply(10, 5));
}

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

Для того чтобы указать что данные метод есть тестовым его нужно про аннотировать @Test после чего данный метод можно будет запускать в отдельном потоке для проведения тестирования.

Доступные аннотации JUnit

В следующей таблице приведен обзор имеющихся в аннотации JUnit 4.x.

Аннотация Описание
@Test
public void method()
 Аннотация @Test определяет что метод method() является тестовым.
@Before
public void method()
 Аннотация @Before указывает на то, что метод будет выполнятся перед каждым тестируемым методом @Test.
@After
public void method()
 Аннотация @After указывает на то что метод будет выполнятся после каждого тестируемого метода @Test
@BeforeClass
public static void method()
 Аннотация @BeforeClass указывает на то, что метод будет выполнятся в начале всех тестов, а точней в момент запуска тестов(перед всеми тестами @Test).
@AfterClass
public static void method()
 Аннотация @AfterClass  указывает на то, что метод будет выполнятся после всех тестов.
@Ignore  Аннотация @Ignore говорит, что метод будет проигнорирован в момент проведения тестирования.
@Test (expected = Exception.class)  (expected = Exception.class) — указывает на то, что в данном тестовом методе вы преднамеренно ожидается Exception.
@Test (timeout=100)  (timeout=100) — указывает, что тестируемый метод не должен занимать больше чем 100 миллисекунд.

Проверяемые методы (основные)

Метод Описание
fail(String)  Указывает на то что бы тестовый метод завалился при этом выводя текстовое сообщение.
assertTrue([message], boolean condition)  Проверяет, что логическое условие истинно.
assertsEquals([String message], expected, actual)  Проверяет, что два значения совпадают. Примечание: для массивов проверяются ссылки, а не содержание массивов.
assertNull([message], object)
 Проверяет, что объект является пустым null.
assertNotNull([message], object)  Проверяет, что объект не является пустым null.
assertSame([String], expected, actual)  Проверяет, что обе переменные относятся к одному объекту.
assertNotSame([String], expected, actual)  Проверяет, что обе переменные относятся к разным объектам.

Шаг 5.

Теперь напишем пример использования тестов:

import com.devcolibri.logic.Calculate;
import org.junit.Test;
import static junit.framework.Assert.*;

public class CalculateTest {
    @Test
    public void testCalA() throws Exception {
        Calculate calculate = new Calculate();
        int n = calculate.calA(2, 2);

        assertEquals(4, n);
    }
}

Как выглядит проект в Intellij IDEA:

 

Как запустить тестирование в Intellij IDEA?

Для этого можно нажать правой кнопкой мыши по тестовому классу и выбрать Run ‘<name project>’.

Урок создан: 26 марта 2013 | Просмотров: 101540 | Автор: Александр Барчук | Правила перепечатки


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

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

Ваш e-mail не будет опубликован.

Комментарии:

  • 18 июля 2013 в 22:48

    Artem

    Очень здорово, спасибо !

  • 15 августа 2013 в 02:11

    Max

    Nice article, thanks.

  • 13 января 2014 в 21:59

    ka_dze

    Danke, gute Artikel zu beginnen.

  • 27 июля 2014 в 12:24

    Роман

    Спасибо тебе Александр Барчук!

  • 15 сентября 2014 в 09:43

    Петрик Александр

    Спасибо

  • 10 января 2015 в 20:00

    Дефлоратор

    Шикарно!
    А добавьте социалку, чтобы лайкать комментарии можно было:)

  • 01 февраля 2015 в 17:03

    Александр

    Боже, как же дохрена рукожопых уродов, которые не могут нехрена никому не че рассказать. А здесь коротко и понятно. Спасибо автору!

    • 24 апреля 2015 в 14:44

      Игорь

      А приведите примеры? Поржать просто охота.

  • 04 февраля 2015 в 12:40

    Alexey

    Спасибо за статью!

  • 16 мая 2015 в 14:04

    Berlin

    Спасибо за полезную статью!

  • 17 мая 2015 в 14:59

    Anton Kolyaev

    junit.framework.Assert.* — deprecated
    используйте
    org.junit.Assert.*; вместо него.

  • 12 июня 2015 в 15:19

    saahon

    Thanks!!!

  • 09 сентября 2015 в 14:07

    Антон

    Спасибо!

  • 05 января 2016 в 10:27

    Сергей

    Краткость-сестра таланта!

  • 24 января 2016 в 22:32

    Alex

    Добрый вечер,

    Подскажите почему у меня в IDEA пропадает автоматом импорт Assert:
    В тестовом классе:
    import org.junit.Test;
    import statis org.junit.Assert.*; -> как только я это добавляю то сразу строка пропадает

    • 24 января 2016 в 22:36

      Alex

      import static org.junit.Assert.*; -> как только я это добавляю то сразу строка пропадает
      Соответственно никакие assertEquals мне не доступны.
      Тестовый класс добавлял через ALT+Insert и т.д.

      • 16 июня 2016 в 14:15

        NT

        ‘junit.framework.Assert’ is deprecated
        This inspection reports where deprecated code is used in the specified inspection scope

  • 18 февраля 2016 в 21:34

    Максим Виноградов

    Спасибо за статью, очень полезно!
    Мне кажется, или в табличке с методами есть маленькая опечатка, — правильно не «assertsEquals», а «assertEquals». Ну по крайней мере первый вариант у меня IDE подсветило как ошибку.

  • 14 июля 2016 в 21:45

    Иван

    Спасибо!

  • 11 октября 2016 в 17:45

    Степан

    А как отключить эту дрянь? Она появилась, а результат работы программы пропал…
    Если пишите про подключение, то напишите и про отключение…