Руководство по JUnit. Утверждения

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

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

Ниже приведены наиболее важные методы класса Assert:

Методы и описание
1
2 void assertTrue(boolean expected, boolean actual)

Проверяет истинность утверждения

3 void assertFalse(boolean condition)

Проверяет ложность утверждения

4 void assertNotNull(Object object)

Проверяет, что объект не является null

5 void assertNull(Object object)

Проверяет, является ли объект null

6 void assertSame(boolean condition)

Проверяет, ссылаются ли ссылки двух объектов на один и тот же объект.

7 void assertNotSame(boolean condition)

Проверяет, не ссылаются ли ссылки двух объектов на один и тот же объект.

Рассмотрим простой пример:

Класс AssertionTests.java


package net.proselyte.tutorials;

import org.junit.Assert;
import org.junit.Test;

import static org.junit.Assert.*;

/**
 * Simple test class that demonstrates {@link Assert} in action
 *
 * @author Eugene Suleimanov
 * @version 1.0
 */
public class AssertionTests {

    @Test
    public void shouldDemonstrateAssertionsTest() {
        Integer first = 1;
        Integer second = 2;
        Integer repeatFirst = 1;

        Integer[] expectedIntegerArray = {1, 2, 3, 4, 5};
        Integer[] resultIntegerArray = {1, 2, 3, 4, 5};

        assertEquals(first,repeatFirst);

        assertNotNull(second);

        assertSame(first, repeatFirst);

        assertArrayEquals(expectedIntegerArray, resultIntegerArray);
    }

}

В результате работы данного теста мы получим следующий результат:
junitassertiontestsresult


Аннотации

Здесь и в предыдущих примерах мы использовали аннотации.

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

  • игнорируют методы и классы
  • запускаются перед и после всех методов
  • запускаются до и после всех тестовых методов

Сейчас мы подробно рассмотрим наиболее часто используемые из них:

Аннотации и описание
1 @Test

Указывает, что данный метод (public void) может быть запущен, как тестовый случай.

2 @Before

Методы с данной аннотацией запускаются перед каждым тестом.

3 @After

Методы с данной аннотацией запускаются после каждого теста.

4 @BeforeClass

Запускается один раз перед запуском любого тестового метода в классе (метод должен быть статическим).

5 @AfterClass

Запускается один раз после запуска любого тестового метода в классе (метод должен быть статическим).

6 @Ignore

Тестовые методы с данной аннотацией не будут выполнены.

Рассмотрим следующий пример:
Создадим класс AnnotationTests.java


package net.proselyte.tutorials.junit;

import org.junit.*;

/**
 * Test class to demonstrate annotations in action
 *
 * @author Eugene Suliemanov
 * @version 1.0
 */
public class AnnotationTests {
    @BeforeClass
    public static void beforeClass(){
        System.out.println("This method has been executed first...");
    }

    @AfterClass
    public static void afterClass(){
        System.out.println("This method has been executed last...");
    }

    @Before
    public void before(){
        System.out.println("Before each test");
    }

    @After
    public void after(){
        System.out.println("After each test");
    }

    @Test
    public void simpleTest(){
        System.out.println("This is simple test");
    }

    @Ignore
    @Test
    public void ignoreTest(){
        System.out.println("This test will be ignored");
    }
}

В результате работы данного класса мы получим следующий результат:

junitassertiontestsresult

На этом мы заканчиваем изучение фреймворка JUnit.
Для более подробного изучения данной технологии крайне рекомендую вам изучить книгу “JUnit in Action”. Она даст хорошее понимание как самого фреймворка, так и примеров его использования.