只要做Java开发的,99%的都用过JUnit。在JUnit4里面除了@Test, @Before, @BeforeClass这样基本的特性,JUnit4还有些很酷但是大家平时不太用的特性。我这里做一下介绍,大家可以用一下,或者至少把玩一下:) 以下特性都基于4.8版本。
ParallelComputer: 并行测试
当需要同时测试testcase的时候,你不需要为自己写thread来做这个事情。JUnit4已经有了这个特性,而且还提供多种同步选择。例如:
/**
* @author 卢声远<michaellufhl@yahoo.com.cn>
*/
public class ParallelComputerTest {
@Test
public void test() {
Class[] cls={ParallelTest1.class,ParallelTest2.class };
//Parallel among classes
JUnitCore.runClasses(ParallelComputer.classes(), cls);
//Parallel among methods in a class
JUnitCore.runClasses(ParallelComputer.methods(), cls);
//Parallel all methods in all classes
JUnitCore.runClasses(new ParallelComputer(true, true), cls);
}
public static class ParallelTest1{
@Test public void a(){}
@Test public void b(){}
}
public static class ParallelTest2{
@Test public void a(){}
@Test public void b(){}
}
}
你有3种同步方式:
1: ParallelComputer.classes():所有测试类同时开始执行,但是每个类里面的方法还是顺序执行。在例子里面ParallelTest1和ParallelTest2同时开始,但是各自的a(),b()还是顺序执行。
2: ParallelComputer.methods():测试类顺序执行,但是每个类里面的方法是同时开始执行。在例子里面ParallelTest1的a()和b()同时开始,等结束之后再开始ParallelTest2。
3: new ParallelComputer(true, true):所有测试类里面方法同时开始执行。在例子里面4个方法同时开始执行。
很有意思吧。
Category: 分类测试
当你有很多testcase,但是你不想每次都执行一遍的时候。你可以把testcase分成若干类,然后可以分类有选择的来执行这些testcase。
例子:譬如你有2类testcase,一类是重要的用Important.class表示,还有一类不那么重要的用Secondary.class表示。
/**
* @author 卢声远<michaellufhl@yahoo.com.cn>
*/
interface Important{};
interface Secondary{};
@RunWith(Categories.class)
@IncludeCategory(Important.class)
@ExcludeCategory(Secondary.class)
@SuiteClasses( { CategoryTest.Alpha.class,
CategoryTest.Beta.class })
public class CategoryTest {
@Category(Important.class)
public static class Alpha{//Alpha is Important except b
@Test
public void a(){}
@Test
@Category(Secondary.class)
public void b(){}
}
public static class Beta{
@Test
@Category(Important.class)
public void a(){}//a is Important
}
}