1package com.zlp.test; 2 3import static org.junit.Assert.assertEquals; 4 5import java.util.Iterator; 6 7import org.hibernate.Query; 8import org.hibernate.Session; 9import org.hibernate.SessionFactory; 10import org.hibernate.cfg.Configuration; 11import org.junit.After; 12import org.junit.AfterClass; 13import org.junit.Before; 14import org.junit.BeforeClass; 15import org.junit.Ignore; 16import org.junit.Test; 17 18import com.zlp.hibernate.Person; 19 /* 20 * 下面是几种常用的测试批注: 21 *@Test:进行测试的方法 22 @Before:初始化方法,每个@Test批注的方法执行前都会先调用此方法 23 @After:释放资源,每个@Test批注的方法执行后都会调用此方法 24 @BeforeClass:必须为static void,测试类中第一个执行的方法,只执行一次 25 @AfterClass:必须为static void,测试类中最后一个执行的方法,只执行一次 26 @Ignore:忽略的测试方法,不影响最终测试结果是通过还是没通过 27 一个JUnit 4 的单元测试用例执行顺序为: 28 @BeforeClass –> @Before –> @Test –> @After –> @AfterClass 29 每一个测试方法的调用顺序为: 30 @Before –> @Test –> @After 31 测试类一般写成XXXtest,测试方法用testXXX */ 32public class HibernateUtilsTest { 33 public static Session session = null; 34 /* 35 * @BeforeClass: 所有测试开始之前运行 //必须定义为static方法 36 * @AfterClass: 所有测试结束之后运行 //必须定义为static方法 37 */ 38 39 40 @BeforeClass 41 public static void classBefore(){ 42 System.out.println("~~~~~~classBefore~~~~~~~~~"); 43 } 44 45 @Before 46 public void init(){ 47 System.out.println("~~~~~before~~~~~~~~"); 48 Configuration config = new Configuration().configure(); 49 SessionFactory factory = config.buildSessionFactory(); 50 session = factory.openSession(); 51 } 52 //@Ignore 53 @Test 54 public void testSave(){ 55 session.beginTransaction().begin(); 56 Query sqlquery = session.createQuery("from Person"); 57 Iterator<Person> it = sqlquery.iterate(); 58 while(it.hasNext()) { 59 Person person = it.next(); 60 System.out.println(person.getPassword()); 61 } 62 } 63 //@Ignore 64 @Test 65 public void add(){ 66 int a = 1; 67 int b = 2; 68 assertEquals(3, a+b); 69 70 } 71 /* 72 * 该元数据传入了一个时间(毫秒)给测试方法,如果测试方法在制定的时间之内没有运行完,则测试也失败。 73 */ 74 @Test(timeout=2000) 75 public void testTimeOut(){ 76 for (int i = 0; i < 10; i++) { 77 try { 78 Thread.sleep(100); 79 80 }catch (Exception e) { 81 // TODO: handle exception 82 } 83 } 84 } 85 /* 86 * 该元数据标记的测试方法在测试中会被忽略。,你可以为该标签传递一个String的参数, 87 * 来表明为什么会忽略这个测试方法。比如:@lgnore(“该方法还没有实现”), 88 * 在执行的时候,仅会报告该方法没有实现,而不会运行测试方法。 89 */ 90 @Ignore("该标签会忽略此测试方法") 91 @Test 92 public void add1(){ 93 int a = 1; 94 int b = 2; 95 assertEquals(3, a+b); 96 97 } 98 99 @Test(expected=NullPointerException.class) 100 public void testException(){ 101 throw new NullPointerException(); 102 } 103 104 105 @After 106 public void destory(){ 107 System.out.println("~~~~~~after~~~~~"); 108 session.beginTransaction().commit(); 109 session.close(); 110 } 111 @AfterClass 112 public static void classAfter(){ 113 System.out.println("~~~~~~classAfter~~~~~~~~~"); 114 } 115 116}
Hamcrest
JUnit4.4引入了Hamcrest框架,Hamcrest提供了一套匹配符Matcher,这些匹配符更接近自然语言,可读性高,更加灵活;