在实际项目中,随着项目进度的开展,单元测试类会越来越多,可是直到现在我们还只会一个一个的单独运行测试类,这在实际项目实践中肯定是不可行的。为了解决这个问题,JUnit 提供了一种批量运行测试类的方法,叫做测试套件。
这样,每次需要验证系统功能正确性时,只执行一个或几个测试套件便可以了。测试套件的写法非常简单,我们需要遵循以下规则:
1. 创建一个空类作为测试套件的入口。
2. 使用注解 org.junit.runner.RunWith 和 org.junit.runners.Suite.SuiteClasses 修饰这个空类。
3. 将 org.junit.runners.Suite 作为参数传入注解 RunWith,以提示 JUnit 为此类使用套件运行器执行。
4. 将需要放入此测试套件的测试类组成数组作为注解 SuiteClasses 的参数。
5. 保证这个空类使用 public 修饰,而且存在公开的不带有任何参数的构造函数。
现在OK了,我们来写代码,这里我写2个测试类,然后让这2个类形成一个测试套件,来一起被测试:
package test.junit4test; import org.junit.Assert; import org.junit.Test; public class LinkinTest1 { @Test public void testTrue() { System.out.println("测试一。。。"); Assert.assertTrue(true); } }
package test.junit4test; import org.junit.Assert; import org.junit.Test; public class LinkinTest2 { @Test public void testTrue() { System.out.println("测试二。。。"); Assert.assertFalse(false); } }
package test.junit4test; import org.junit.runner.RunWith; import org.junit.runners.Suite; import org.junit.runners.Suite.SuiteClasses; @RunWith(Suite.class) @SuiteClasses({ LinkinTest1.class, LinkinTest2.class }) public class LinkinAllTest { }
注意:一定要保证测试套件之间没有循环包含关系,否则无尽的循环就会出现在我们的面前。
OK,最后我们写一个测试组件又包含测试组件的例子结束这篇博客。
package test.junit4test; import org.junit.Assert; import org.junit.Test; public class LinkinTest1 { @Test public void testTrue() { System.out.println("测试一。。。"); Assert.assertTrue(true); } }
package test.junit4test; import org.junit.Assert; import org.junit.Test; public class LinkinTest2 { @Test public void testTrue() { System.out.println("测试二。。。"); Assert.assertFalse(false); } }
package test.junit4test; import org.junit.Assert; import org.junit.Test; public class LinkinTest3 { @Test public void testTrue() { System.out.println("测试三。。。"); Assert.assertEquals("1", "1"); } }
package test.junit4test; import org.junit.runner.RunWith; import org.junit.runners.Suite; import org.junit.runners.Suite.SuiteClasses; @RunWith(Suite.class) @SuiteClasses({ LinkinTest1.class, LinkinTest2.class }) public class LinkinAllTest1 { }
package test.junit4test; import org.junit.runner.RunWith; import org.junit.runners.Suite; import org.junit.runners.Suite.SuiteClasses; @RunWith(Suite.class) @SuiteClasses({ LinkinAllTest1.class, LinkinTest3.class }) public class LinkinAllTest2 { }