JUnit - カテゴリーテスト

JUnit –カテゴリテスト

JUnitでは、テストケースをさまざまなカテゴリに整理し、それらの分類されたテストケースを@Categories.ExcludeCategoryまたは@Categories.IncludeCategoryで実行できます。

Note
この@Categoriesアノテーションは、JUnit4.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. スイートテスト

分類されたテストケースを実行する例。

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と同様です。