Шпаргалка по JUnit 4


JUnit



    Краткий перечень аннотаций, используемых в библиотеке модульного тестирования JUnit 4.

Для использования, к проекту необходимо подключить библиотеку, которую можно взять отсюда. Далее импортируются необходимые классы аннотаций, кучей или по отдельности - дело вкуса:
import org.junit.*;
// или
import org.junit.Test;
...

В след за импортом классов, необходимо выполнить импорт статических методов класса Assert:
import static junit.framework.Assert.*;
// или
import static junit.framework.Assert.assertEquals;
...

Библиотека готова к работе. Вот на что она способна:

Краткий список утверждений

Утверждение эквивалентности

assertEquals("Комментарий на случай провала теста", expected, actual);
expected - ожидаемое значение контролируемого аргумента.
actual - действительное значение контролируемого аргумента.
Важное замечание: сравниваемыми аргументами могут быть и массивы. Их сравнение выполняется поэлементно:
assertEquals("Комментарий на случай провала теста", Object[], Object[]);

Булевы утверждения

assertTrue("Комментарий на случай провала теста", <boolean expression>);
assertFalse("Комментарий на случай провала теста", <boolean expression>);

Null утверждения

assertNull("Комментарий на случай провала теста", Object);
assertNotNull("Комментарий на случай провала теста", Object);

Объявление тестов

Тестирование метода

Чтобы превратить метод в тест, достаточно добавить аннотацию @org.junit.Test:
@org.junit.Test
public void someTest() throws Exception {
...
}

Тестирование исключений

Если надо проконтролировать появление ожидаемых исключений:
@org.junit.Test(expected = SomeException.class)
public void someTest() throws Exception {
...
}

Тестирование по времени выполнения

Если надо проконтролировать время выполнения теста:
@org.junit.Test(timeout = 100)
public void someTest() throws Exception {
...
}
Время указывается в миллисекундах.

Игнорирование тестов

Чтобы пропустить тест:
@org.junit.Ignore("Причина игнорирования")
@org.junit.Test
public void someTest() throws Exception {
...
}

Фикстуры

Сценарии тестов могут нуждаться в некоторых действиях, предшествующих тесту(наполнение БД) или выполняющихся после него(очистка БД). Для этого существуют так называемые фикстуры.

Фикстура - Fixture - состояние среды тестирования, которое требуется для успешного выполнения тестового метода. Это может быть набор каких-либо объектов, состояние базы данных, наличие определенных файлов и т.д. Фикстура создается в методе setUp() перед каждым вызовом метода вида testSomething теста (TestCase) и удаляется в tearDown() после окончания выполнения тестового метода.

Однократное выполнение кода

Чтобы определить код, который должен выполнятся в самом начале исполнения набора тестов:
@BeforeClass
public void setUpBeforClass() throws Exception {
...
}
Код, выполняемый после исполнения всего набора тестов:
@AfterClass
public void tearDownAfterClass() throws Exception {
...
}

Выполнение кода до и после каждого теста

Чтобы определить код, который должен выполнятся перед каждым тестом из набора:
@Before
public void setUpBeforTest() throws Exception {
...
}
Код, выполняемый после исполнения каждого теста из набора:
@After
public void tearDownAfterTest() throws Exception {
...
}

Параметризированное тестирование

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

  1. Определить статический метод возвращающий Collection и отметить его как org.junit.runners.Parameterized.Parameters:
    @org.junit.runners.Parameterized.Parameters
    public static Collection getParameters() {
        return Arrays.asList(new Object[][] { 
            {Parameter11, Parameter12, Parameter13 }, 
            {Parameter21, Parameter22, Parameter23},
            ... 
            {Parameter91, Parameter92, Parameter93 }});
    }
    
    Обратите внимание, для того, чтобы указать несколько параметров,элементами возвращаемой коллекции должны быть одномерные массивы, содержащие эти параметры.
  2. Создать поле в классе набора тестов, соответствующее параметру, с которым этот набор выполняется:
    private Parameter1Type parameter1;
    private Parameter2Type parameter2;
    private Parameter3Type parameter3;
    
  3. Определить конструктор, принимающий значение аргумента выполнения:
    public TestCase(Parameter1Type param1, Parameter2Type param2, Parameter3Type param3) {
        this.parameter1 = param1;
        this.parameter2 = param2;
        this.parameter3 = param3;
    }
  4. Указать, что набор тестов необходимо исполнять вместе с классом Parameterized (достигается использованием аннотации @RunWith):
    @org.junit.runner.RunWith(Parameterized.class)
    public class TestCase {
    ...
    }
    

Что еще почитать:

  1. Термины и определения, связанные с разработкой через тестирование
  2. Переходим на JUnit 4
  3. JUnit. Getting started.

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