有时,我们可能需要将几个测试类组合在一起执行,或将几个测试类的某几个测试方法组合在一起执行。当然在实际的应用中还是用的比较少,我们可以很方便的使用maven来跑测试用例;这里纯属技术探讨。
测试类ATest.java
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.java
public interface FastTest {}
public interface SlowTest {}
以上是准备工作:
1、Suite组合测试类。
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个测试方法。输出如下:
atest1atest2btest1btest2btest3
2、Categories组合测试类或测试方法。
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的所有测试方法。输出如下:
atest1btest1btest2btest3
还可以使用@ExcludeCategory排除某些标记方法,代码如下
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()测试方法将会排除掉,执行结果如下:
atest1btest1btest2