package com.zlp.test;
import static org.junit.Assert.assertEquals;
import java.util.Iterator;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;
import com.zlp.hibernate.Person;
/*
* 下面是几种常用的测试批注:
*@Test:进行测试的方法
@Before:初始化方法,每个@Test批注的方法执行前都会先调用此方法
@After:释放资源,每个@Test批注的方法执行后都会调用此方法
@BeforeClass:必须为static void,测试类中第一个执行的方法,只执行一次
@AfterClass:必须为static void,测试类中最后一个执行的方法,只执行一次
@Ignore:忽略的测试方法,不影响最终测试结果是通过还是没通过
一个JUnit 4 的单元测试用例执行顺序为:
@BeforeClass –> @Before –> @Test –> @After –> @AfterClass
每一个测试方法的调用顺序为:
@Before –> @Test –> @After
测试类一般写成XXXtest,测试方法用testXXX */
public class HibernateUtilsTest {
public static Session session = null;
/*
* @BeforeClass: 所有测试开始之前运行 //必须定义为static方法
* @AfterClass: 所有测试结束之后运行 //必须定义为static方法
*/
@BeforeClass
public static void classBefore(){
System.out.println("~~~~~~classBefore~~~~~~~~~");
}
@Before
public void init(){
System.out.println("~~~~~before~~~~~~~~");
Configuration config = new Configuration().configure();
SessionFactory factory = config.buildSessionFactory();
session = factory.openSession();
}
//@Ignore
@Test
public void testSave(){
session.beginTransaction().begin();
Query sqlquery = session.createQuery("from Person");
Iterator<Person> it = sqlquery.iterate();
while(it.hasNext()) {
Person person = it.next();
System.out.println(person.getPassword());
}
}
//@Ignore
@Test
public void add(){
int a = 1;
int b = 2;
assertEquals(3, a+b);
}
/*
* 该元数据传入了一个时间(毫秒)给测试方法,如果测试方法在制定的时间之内没有运行完,则测试也失败。
*/
@Test(timeout=2000)
public void testTimeOut(){
for (int i = 0; i < 10; i++) {
try {
Thread.sleep(100);
}catch (Exception e) {
// TODO: handle exception
}
}
}
/*
* 该元数据标记的测试方法在测试中会被忽略。,你可以为该标签传递一个String的参数,
* 来表明为什么会忽略这个测试方法。比如:@lgnore(“该方法还没有实现”),
* 在执行的时候,仅会报告该方法没有实现,而不会运行测试方法。
*/
@Ignore("该标签会忽略此测试方法")
@Test
public void add1(){
int a = 1;
int b = 2;
assertEquals(3, a+b);
}
@Test(expected=NullPointerException.class)
public void testException(){
throw new NullPointerException();
}
@After
public void destory(){
System.out.println("~~~~~~after~~~~~");
session.beginTransaction().commit();
session.close();
}
@AfterClass
public static void classAfter(){
System.out.println("~~~~~~classAfter~~~~~~~~~");
}
}
Hamcrest
JUnit4.4引入了Hamcrest框架,Hamcrest提供了一套匹配符Matcher,这些匹配符更接近自然语言,可读性高,更加灵活;