Junit的所有测试方法都是以@Test修饰,以public void 开头。如下:
@Test
public void testAdd() {
assertEquals(0, new Calculate().add(0, 1));
}
@BeforeClass && @AfterClass 都是只会执行一次,@BeforeClass是在类加载的时候执行,@AfterClass 是整个类结束的时候被执行,整个方法是一个静态方法。
@BeforeClass
public static void setUpBeforeClass() throws Exception {
System.out.println("before class");
}
@AfterClass
public static void tearDownAfterClass() throws Exception {
System.out.println("after class");
}
@Before && @After两个方法是在每个测试方法执行的执行都会被执行,@Before是在方法执行前执行,@After是在方法执行结束后执行。
@Before
public void setUp() throws Exception {
System.out.println("before");
}
@After
public void tearDown() throws Exception {
System.out.println("after");
}
@Ignore 所修饰的测试方法会被测试运行器忽略,例如以下的test1方法就会被测试运行器忽略执行。
@Ignore
@Test
public void test1() {
System.out.println("test1");
}
@Test(timeout=毫秒),用来指定时间上限,如果这个测试方法的执行时间超过了这个时间值则测试失败。
// 会执行失败,因为sleep的时间长于设定的timeout时间
@Test(timeout=1000)
public void test() {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
@Test(expected=异常类),用expected来指定应该抛出的异常,如果在执行过程中没有抛出异常或者抛出的异常不是指定的异常,则测试失败。
// 这个测试案例会执行成功,因为指定的异常就是程序要抛出的异常
@Test(expected=IndexOutOfBoundsException.class)
public void outOfBounds()
{
new ArrayList<Object>().get(1);
}
测试套件就是组织所要测试的类一起运行,如果单个类单独的运行是比较麻烦的,可以使用测试套件一起运行这些测试类。需要注意的是:
- 测试套件的类是不包含其他任何方法
- 同时要更改测试运行器为Suite.class
- 将要测试的类作为数组传入到SuiteClasses({})中
// 更改测试运行器以及将要测试的类放入SuiteClasses中
@RunWith(Suite.class)
@SuiteClasses({ AppTest.class, CalculateTest.class, JunitFlowTest.class })
public class AllTests {
// 没有测试方法
}