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