1. 两种错误:Error和Failure
Error是代码错误
@Test publicvoid testAdd() { int z=new T().add(5,3); assertEquals(8,z); int a=8/0; //这一句是有错误的 }
Failure是测试失败
@Test publicvoid testAdd() { int z=new T().add(5,4); //这里修改了数值,把4该为3就正确了 assertEquals(8,z); }
2. 常用注解:
1. @Test : 测试方法,测试程序会运行的方法,后边可以跟参数代表不同的测试,如(expected=XXException.class) 异常测试,(timeout=xxx)超时测试
@Test(expected=*.class)
在JUnit4.0之前,对错误的测试,我们只能通过fail来产生一个错误,并在try块里面assertTrue(true)来测试。现在,通过@Test元数据中的expected属性。expected属性的值是一个异常的类型
@Test(timeout=xxx):
该元数据传入了一个时间(毫秒)给测试方法,
如果测试方法在制定的时间之内没有运行完,则测试也失败。
2. @Ignore : 被忽略的测试方法
该元数据标记的测试方法在测试中会被忽略。当测试的方法还没有实现,或者测试的方法已经过时,或者在某种条件下才能测试该方法(比如需要一个数据库联接,而在本地测试的时候,数据库并没有连接),那么使用该标签来标示这个方法。同时,你可以为该标签传递一个String的参数,来表明为什么会忽略这个测试方法。比如:@lgnore(“该方法还没有实现”),在执行的时候,仅会报告该方法没有实现,而不会运行测试方法。
3. @Before: 每一个测试方法之前运行
4. @After : 每一个测试方法之后运行
5. @BeforeClass: 所有测试开始之前运行
6. @AfterClass: 所有测试结束之后运行
例如:
package com.junit4.cc.test; importstatic org.junit.Assert.*; importstatic org.hamcrest.Matcher.*; import org.junit.Test; import com.junit4.cc.*; import org.junit.Before; import org.junit.BeforeClass; import org.junit.AfterClass; import org.junit.After; import org.junit.Ignore; publicclass TTest { @BeforeClass //的所有方法运行之前运行。 public static void beforeClass(){ System.out.println("------------beforeClass"); } @AfterClass //在所有方法运行之后运行 public static void afterClass(){ System.out.println("-------------afterClass"); } @Before //每个测试方法运行之前运行 public void before(){ System.out.println("=======before"); } @After //每个测试方法运行之后运行 public void after(){ System.out.println("=======after"); } @Test publicvoid testAdd() { int z=new T().add(5,3); assertEquals(8,z); System.out.println("test Run through"); } @Test () public void testdivision(){ System.out.println("in Test Division"); } @Ignore //表示这个方法是不被运行的 @Test (expected=java.lang.ArithmeticException.class,timeout=100) //timeout表示要求方法在100毫秒内运行完成,否则报错 public void testDivide(){ int z =new T().divide(8,2); } }
运行结果如下: