Архив за месяц: Сентябрь 2015

Простой пример использования JUnit 4.11 Создаем первые тесты с аннотацией @After @Before

В заметки рассмотрим как создать тесты для модульного тестирования с помощью JUnit на java с нуля. Проще всего создать новый maven проект, в зависимости добавляем JUnit, как это показано ниже:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.jjj</groupId>
    <artifactId>jjj</artifactId>
    <version>1.0-SNAPSHOT</version>

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

</project>

далее сделав maven install (я использую idea) создаем самые простые тесты в package /src/test/java/tests
(у вас может быть другой package) . Сравнение значений происходит с помощью функций assert*

package tests;

import TestWrapper;
import org.junit.Test;

import static org.junit.Assert.*;

/**
 * Created by sbt-zabaykin-av on 29/09/2015.
 */
public class Test_01 extends TestWrapper {
    @Test
    public void test_1(){
        String functionName = new Object(){}.getClass().getEnclosingMethod().getName();
        System.out.println( functionName );
        assertEquals("aaa", "aaa");
    }

    @Test
    public void test_2(){
        String functionName = new Object(){}.getClass().getEnclosingMethod().getName();
        System.out.println( functionName );
        assertTrue(true);
    }
}

Как видите, мы унаследовались от класса TestWrapper и это не спроста. В данном примере мы хотим сделать специальные функции, которые будут срабатывать до теста и после теста (before\after test), а также для всех тестов в классе TEST_01 и после всех тестов в данном классе (beforeClass\afterClass). Для данной цели следует использовать аннотацию JUnit @Before, @After, @BeforeClass, @AfterClass. Для наглядности пример делает вывод System.out с названием текущей функции. После запуска вы увидите в каком порядке запускались все методы.

package tests;

import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.After;
import org.junit.Before;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;

@RunWith(Suite.class)
public class TestWrapper {

    @BeforeClass
    public static void beforeAllTests(){
        String functionName = new Object(){}.getClass().getEnclosingMethod().getName();
        System.out.println( "***" + functionName );
    }

    @Before
    public void beforeSimple(){
        String functionName = new Object(){}.getClass().getEnclosingMethod().getName();
        System.out.println( functionName );
    }

    @AfterClass
    public static void afterAllTests(){
        String functionName = new Object(){}.getClass().getEnclosingMethod().getName();
        System.out.println( "***" + functionName );
    }

    @After
    public void afterSimple(){
        String functionName = new Object(){}.getClass().getEnclosingMethod().getName();
        System.out.println( functionName );
    }
}

Таким образом вы можете использовать JUnit для ваших тестов. Хочется отметить, что к сожалению у JUnit нет возможности запускать метод перед всеми тестовыми классами и после всех тестовых классов.