- 只能对public方法进行测试
- eclipse创建测试类的话是右键类->junit测试用例,然后下一步选中要测试的方法,然后把整个方法体搬到对应的测试方法中,要测试哪个方法直接在侧边栏该方法上右击选择Junit方法测试即可,不用写main方法。
以下为测试保存一个学生到数据库的类
public class StudentTestTest { private SessionFactory sessionFactory=HibernateUtil.getSessionFactory(); @Test public void testAdd() { Session session=sessionFactory.openSession(); // 生成一个session session.beginTransaction(); // 开启事务 Student s=new Student(); s.setName("张三"); session.save(s); session.getTransaction().commit(); // 提交事务 session.close(); // 关闭session } }
- 代码实例:eclipse->HibernateCrud
一般我们会在测试类中加上测试前方法和测试后方法。以下为测试多对一的学生类和班级类,分别保存同一班的两名学生的方法。
public class StudentTestTest { //因为下面两个方法都要用到这俩属性,所以实例化在外面 private SessionFactory sessionFactory=HibernateUtil.getSessionFactory(); private Session session; @Before //测试前调用 public void setUp() throws Exception { session=sessionFactory.openSession(); session.beginTransaction(); } @After //测试后调用 public void tearDown() throws Exception { session.getTransaction().commit(); session.close(); } @Test public void testSaveClassAndStudent() { Class c=new Class(); c.setName("08计本"); session.save(c); Student s1=new Student(); s1.setName("张三"); s1.setC(c); Student s2=new Student(); s2.setName("李四"); s2.setC(c); session.save(s1); session.save(s2); } }
- 多个@Test方法同时执行的话顺序是随机且每次都不确定的
junit-4.11开始可以用@FixMethodOrder来指定顺序,但就是不能指定按方法定义的顺序执行,所以最好就是一个方法一个方法单独执行
//@FixMethodOrder(MethodSorters.JVM) //按JVM顺序,随机不确定,默认按此方式 @FixMethodOrder(MethodSorters.DEFAULT) //随机确定 //@FixMethodOrder(MethodSorters.NAME_ASCENDING) //按命名顺序 public class StudentTest2 { private static final Logger logger=Logger.getLogger(StudentTest2.class); private SqlSession sqlSession; private StudentMapper studentMapper; /** * 方法执行前打开一个连接 * setUp方法可以用于初始化变量 * @throws Exception */ @Before public void setUp() throws Exception { sqlSession=SqlSessionFactoryUtil.openSession(); studentMapper=sqlSession.getMapper(StudentMapper.class); } /** * 方法执行后回收连接 * @throws Exception */ @After public void tearDown() throws Exception { sqlSession.close(); } @Test public void testAdd() { logger.info("添加学生"); Student student=new Student(4,"李四",14); studentMapper.add(student); sqlSession.commit(); } @Test public void testUpdate() { logger.info("修改学生"); Student student=new Student(3,"张三",13); studentMapper.update(student); sqlSession.commit(); } }
- 贴4.11及以上的jar包要同时贴上hamcrest-core的jar包,不然报java.lang.NoClassDefFoundError
@After、@Before注解
- Junit4开始使用Java5的注解,常用的:
- @BeforeClass:针对一个类的all测试,只执行一次,被注解方法必须为static void。
- @Before:初始化方法。
- @Test:测试方法。
- @After:测试后执行的方法,通常是释放资源的。
- @AfterClass:针对all测试,只执行一次,必须为static void。
- @Ignore:忽略的测试方法。
- 一个单元测试用例的执行顺序:@BeforeClass->@Before->@Test->@After->@AfterClass
- 每个测试方法的执行顺序:@Before->@Test->@After