JUnit - Test des catégories

JUnit - Test des catégories

Dans JUnit, vous pouvez organiser les cas de test en différentes catégories et exécuter ces cas de test catégorisés avec@Categories.ExcludeCategory ou@Categories.IncludeCategory

Note
Cette annotation@Categories est disponible depuis JUnit 4.12

1. Catégorie = Interface de marqueur

Dans JUnit, vous devez créer des interfaces de marqueurs pour représenter les catégories:

PerformanceTests.java

package com.example.category;

//category marker interface
public interface PerformanceTests {
}

RegressionTests.java

package com.example.category;

public interface RegressionTests {
}

2. Exemples de @Category

Organiser les cas de test en différentes catégories.

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. Test de la suite

Exemples pour exécuter les cas de test catégorisés.

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 {
}

Sortie

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 {
}

Sortie

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 {
}

Sortie

ClassA.test_a_2()
ClassC.test_c_2()

Note
Ceci est similaire avec lesTestNG group test.