Junit4 分类测试

1 Junit分类测试的介绍

从给定的一组测试类中,类别运行器仅运行用@IncludeCategory批注指定的类别或该类别的子类型进行批注的类和方法。类或接口都可以用作类别。子类型有效,因此,如果您说@IncludeCategory(SuperClass.class),则会运行标记为@Category({SubClass.class})的测试。
 
您还可以使用@ExcludeCategory 注解排除类别 
例:
public interface FastTests { /* category marker */ }
public interface SlowTests { /* category marker */ }
/**
 * 一点教程网: http://www.yiidian.com
 */
public class A {
  @Test
  public void a() {
    fail();
  }

  @Category(SlowTests.class)
  @Test
  public void b() {
  }
}

@Category({SlowTests.class, FastTests.class})
public class B {
  @Test
  public void c() {

  }
}

@RunWith(Categories.class)
@IncludeCategory(SlowTests.class)
@SuiteClasses( { A.class, B.class }) // Note that Categories is a kind of Suite
public class SlowTestSuite {
  // Will run A.b and B.c, but not A.a
}

@RunWith(Categories.class)
@IncludeCategory(SlowTests.class)
@ExcludeCategory(FastTests.class)
@SuiteClasses( { A.class, B.class }) // Note that Categories is a kind of Suite
public class SlowTestSuite {
  // Will run A.b, but not A.a or B.c
}

2 在Maven中进行分类测试

您可以将类别与 maven-surefire-plugin  (用于单元测试)或 maven-failsafe-plugin(用于集成测试)一起使用。使用任何一个插件,您都可以配置要包括或排除的类别列表。不使用任何一个选项,默认情况下将执行所有测试。
<build>
  <plugins>
    <plugin>
      <artifactId>maven-surefire-plugin</artifactId>
      <configuration>
        <groups>com.example.FastTests,com.example.RegressionTests</groups>
      </configuration>
    </plugin>
  </plugins>
</build>

同样,要排除某些类别的列表,可以使用 <excludedGroups/>configuration元素。

3 在Gradle中进行分类测试

Gradle的测试任务允许您指定要包括和排除的JUnit类别。
test {
    useJUnit {
        includeCategories 'org.gradle.junit.CategoryA'
        excludeCategories 'org.gradle.junit.CategoryB'
    }
}

4 在SBT中进行分类测试

SBT的 JUnit接口 允许通过--include-categories=<CLASSES> 和 规范JUnit类别 --exclude-categories=<CLASSES>。

5 分类测试的典型用法

类别用于在测试中添加元数据。
经常遇到的类别用法是关于:
  • 自动化测试的类型:单元测试,集成测试,SmokeTests,回归测试,性能测试...
  • 测试执行的速度:SlowTests,QuickTests
  • 应该在ci构建的哪一部分中执行测试:NightlyBuildTests
  • 测试状态:UnstableTests,InProgressTests
这还用于添加特定于项目的元数据,例如测试涵盖了项目的哪个功能。

热门文章

优秀文章