有时,咱们可能须要将几个测试类组合在一块儿执行,或将几个测试类的某几个测试方法组合在一块儿执行。固然在实际的应用中仍是用的比较少,咱们能够很方便的使用maven来跑测试用例;这里纯属技术探讨。java
测试类ATest.javamaven
import org.junit.Test; import org.junit.experimental.categories.Category; public class ATest { @Test @Category(FastTest.class) // @Category 放在测试方法上 public void atest1() { System.out.println("atest1"); } @Test @Category(SlowTest.class) public void atest2() { System.out.println("atest2"); } }
测试类BTest.java测试
// @Category 放在测试类上 @Category(FastTest.class) public class BTest { @Test public void btest1() { System.out.println("btest1"); } @Test public void btest2() { System.out.println("btest2"); } @Test @Category(SlowTest.class) public void btest3() { System.out.println("btest3"); } }
两个用于Categories标记分组做用的接口,固然也能够是类,这些接口仅仅用于标记分组:FastTest.java、SlowTest.javaui
public interface FastTest { }
public interface SlowTest { }
以上是准备工做:spa
一、Suite组合测试类。code
import org.junit.runner.RunWith; import org.junit.runners.Suite; import org.junit.runners.Suite.SuiteClasses; @RunWith(Suite.class) // 这里将按顺序执行,A测试类先执行,B测试类后执行。固然测试类中方法的执行是无序的。 @SuiteClasses({ ATest.class, BTest.class }) public class SuiteTests { }
执行SuiteTests将运行A、B的5个测试方法。输出以下:接口
atest1 atest2 btest1 btest2 btest3
二、Categories组合测试类或测试方法。it
import org.junit.experimental.categories.Categories; import org.junit.experimental.categories.Categories.IncludeCategory; import org.junit.runner.RunWith; import org.junit.runners.Suite.SuiteClasses; @RunWith(Categories.class) @IncludeCategory(FastTest.class) @SuiteClasses({ ATest.class, BTest.class }) public class Categories1Tests { }
以上的代码将会执行@Category(FastTest.class)标记的类或测试方法,因此会执行ATest的测试方法atest1(),以及BTest的全部测试方法。输出以下:ast
atest1 btest1 btest2 btest3
还能够使用@ExcludeCategory排除某些标记方法,代码以下class
import org.junit.experimental.categories.Categories; import org.junit.experimental.categories.Categories.ExcludeCategory; import org.junit.experimental.categories.Categories.IncludeCategory; import org.junit.runner.RunWith; import org.junit.runners.Suite.SuiteClasses; @RunWith(Categories.class) @IncludeCategory(FastTest.class) @ExcludeCategory(SlowTest.class) @SuiteClasses({ ATest.class, BTest.class }) public class Categories2Tests { }
这样BTest中的btest3()测试方法将会排除掉,执行结果以下:
atest1 btest1 btest2