JUnit - Тест категории

JUnit - Тест категорий

В JUnit вы можете систематизировать тестовые примеры по различным категориям и запускать эти категоризированные тестовые примеры с помощью@Categories.ExcludeCategory или@Categories.IncludeCategory.

Note
Эта аннотация@Categories доступна с JUnit 4.12

1. Категория = Маркер Интерфейс

В JUnit вам необходимо создать интерфейсы маркеров для представления категорий:

PerformanceTests.java

package com.example.category;

//category marker interface
public interface PerformanceTests {
}

RegressionTests.java

package com.example.category;

public interface RegressionTests {
}

2. @Category Примеры

Разделение тестовых примеров на разные категории.

2.1 @Category on method level.

ClassA.java

package com.example.category;

import org.junit.Test;
import org.junit.experimental.categories.Category;

import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;

public class ClassA {

    @Category(PerformanceTests.class)
    @Test
    public void test_a_1() {
        assertThat(1 == 1, is(true));
    }

    @Test
    public void test_a_2() {
        assertThat(1 == 1, is(true));
    }

}

2.2 @Category on class level.

ClassB.java

package com.example.category;

import org.junit.Test;
import org.junit.experimental.categories.Category;

import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;

@Category({PerformanceTests.class, RegressionTests.class})
public class ClassB {

    @Test
    public void test_b_1() {
        assertThat(1 == 1, is(true));
    }

}

2.3 Multiple @Category examples.

ClassC.java

package com.example.category;

import org.junit.Test;
import org.junit.experimental.categories.Category;

import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;

public class ClassC {

    @Category({PerformanceTests.class, RegressionTests.class})
    @Test
    public void test_c_1() {
        assertThat(1 == 1, is(true));
    }

    @Category(RegressionTests.class)
    @Test
    public void test_c_2() {
        assertThat(1 == 1, is(true));
    }

}

3. Suite Test

Примеры для запуска тестовых случаев по категориям.

3.1 Include category example, run PerformanceTests category.

PerformanceTestSuite.java

package com.example.category;

import org.junit.experimental.categories.Categories;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;

@RunWith(Categories.class)
@Categories.IncludeCategory(PerformanceTests.class)
//Include multiple categories
//@Categories.IncludeCategory({PerformanceTests.class, RegressionTests.class})
@Suite.SuiteClasses({ClassA.class, ClassB.class, ClassC.class})
public class PerformanceTestSuite {
}

Выход

ClassA.test_a_1()
ClassB.test_b_1()
ClassC.test_c_1()

3.2 Include category example, run RegressionTestSuite category.

RegressionTestSuite.java

package com.example.category;

import org.junit.experimental.categories.Categories;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;

@RunWith(Categories.class)
@Categories.IncludeCategory(RegressionTests.class)
@Suite.SuiteClasses({ClassA.class, ClassB.class, ClassC.class})
public class RegressionTestSuite {
}

Выход

ClassB.test_b_1()
ClassC.test_c_1()
ClassC.test_c_2()

3.3 Exclude category example.

ExcludePerformanceTestSuite.java

package com.example.category;

import org.junit.experimental.categories.Categories;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;

@RunWith(Categories.class)
@Categories.ExcludeCategory(PerformanceTests.class)
@Suite.SuiteClasses({ClassA.class, ClassB.class, ClassC.class})
public class ExcludePerformanceTestSuite {
}

Выход

ClassA.test_a_2()
ClassC.test_c_2()

Note
Это похоже наTestNG group test.