有時,咱們可能須要將幾個測試類組合在一塊兒執行,或將幾個測試類的某幾個測試方法組合在一塊兒執行。固然在實際的應用中仍是用的比較少,咱們能夠很方便的使用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