通常只会使用junit测试非main方法,在我眼里就是程序入口实现而已。今天,发现原来可以测试类。
针对mybatis练习。在需要测试的UserDaoImpl类上右键,新建一个junit case,位置可以放到新创建的source folder :test里面。
选择需要测试的方法:
然后就会生成一个测试方法,自己补足测试方法就好:
1 package cn.mrf.mybatis.dao; 2 3 import static org.junit.Assert.*; 4 5 import java.io.InputStream; 6 7 import org.apache.ibatis.io.Resources; 8 import org.apache.ibatis.session.SqlSession; 9 import org.apache.ibatis.session.SqlSessionFactory; 10 import org.apache.ibatis.session.SqlSessionFactoryBuilder; 11 import org.junit.Before; 12 import org.junit.Test; 13 14 import cn.mrf.mybatis.po.User; 15 16 public class UserDaoImplTest { 17 18 private SqlSessionFactory sqlSessionFactory; 19 20 //此方法是在执行testFindUserById之前执行 21 @Before 22 public void setUp() throws Exception{ 23 //创建sqlSessionFactory 24 //mybatis配置文件 25 String resource = "SqlMapConfig.xml"; 26 27 InputStream inputStream = Resources.getResourceAsStream(resource); 28 //创建会话工厂,传入mybatis的配置文件信息 29 sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); 30 31 } 32 33 @Test 34 public void testFindUserById() throws Exception { 35 //创建UserDao对象 36 UserDao userDao = new UserDaoImpl(sqlSessionFactory); 37 //调用 38 User user = userDao.findUserById(1); 39 40 System.out.println(user); 41 } 42 43 }
下面是被测试的类:
1 package cn.mrf.mybatis.dao; 2 3 import java.util.List; 4 5 import org.apache.ibatis.session.SqlSession; 6 import org.apache.ibatis.session.SqlSessionFactory; 7 8 import cn.mrf.mybatis.po.User; 9 /** 10 * 11 * @ClassName: UserDaoImpl 12 * @Description: 接口实现类 13 * @author mrf 14 * @date 2015-9-19 下午05:57:03 15 * 16 */ 17 public class UserDaoImpl implements UserDao { 18 19 // 需要向dao实现类中注入SqlSessionFactory 20 // 这里通过构造方法注入 21 private SqlSessionFactory sqlSessionFactory; 22 23 public UserDaoImpl(SqlSessionFactory sqlSessionFactory) { 24 this.sqlSessionFactory = sqlSessionFactory; 25 } 26 27 28 @Override 29 public User findUserById(int id) throws Exception { 30 //sqlSession是线程不安全的,所以单独使用 31 SqlSession sqlSession = sqlSessionFactory.openSession(); 32 33 User user = sqlSession.selectOne("test.findUserById",id); 34 35 //释放资源 36 sqlSession.close(); 37 return user; 38 } 39 40 @Override 41 public List<User> findUserByName(String name) throws Exception { 42 SqlSession sqlSession = sqlSessionFactory.openSession(); 43 44 List<User> list = sqlSession.selectList("test.findUserByName",name); 45 46 //释放资源 47 return list; 48 } 49 50 @Override 51 public void insertUser(User user) throws Exception { 52 SqlSession sqlSession = sqlSessionFactory.openSession(); 53 //执行插入 54 sqlSession.insert("test.insertUser",user); 55 56 //提交事物 57 sqlSession.commit(); 58 // 释放资源 59 sqlSession.close(); 60 61 62 } 63 64 @Override 65 public void deleteUser(int id) throws Exception { 66 SqlSession sqlSession = sqlSessionFactory.openSession(); 67 68 //执行插入操作 69 sqlSession.delete("test.deleteUser", id); 70 71 // 提交事务 72 sqlSession.commit(); 73 74 // 释放资源 75 sqlSession.close(); 76 } 77 78 }