首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

myBatis 从 spring分开 进行快速单元测试

2012-09-22 
myBatis 从 spring分离 进行快速单元测试项目采用mybatis + spring开发,这是以前的测试代码, 【运行需要30s

myBatis 从 spring分离 进行快速单元测试

项目采用mybatis + spring开发,这是以前的测试代码, 【运行需要30s】

private static MemberService memberService;@BeforeClasspublic static void setUp() throws Exception{ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");memberService = (MemberService)context.getBean("memberService");

?

?这种方式的不好,要实例化整个spring容器,如果项目很大,一个单元测试运行的时间将会很长;

?下面我把myBatis从spring进行分离,分离后进行单元测试速度很快:下面是改进后的测试类,【运行只需3s】

?

private static MemberService memberService;@BeforeClasspublic static void setUp() throws Exception{MemberDao memberDao = new MemberDao();memberDao.setMemberMapper((MemberMapper)SessionFactory.getMapper(MemberMapper.class));MemberServiceImpl memberServiceimpl = new MemberServiceImpl();memberServiceimpl.setMemberDao(memberDao);memberService = memberServiceimpl;

1,configuration xml

?

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"  "http://mybatis.org/dtd/mybatis-3-config.dtd">  <configuration> <settings>        <!-- changes from the defaults -->        <setting name="lazyLoadingEnabled" value="false" />    </settings>    <typeAliases>               <!-- 会员实体begin -->        <typeAlias alias="member" type="com.***.project.member.domain.Member" />        <!-- 会员实体end -->            </typeAliases>    <plugins>          <!-- 指定数据库分页方言Dialect, 其它方言:OracleDialect,SQLServerDialect,SybaseDialect,DB2Dialect,PostgreSQLDialect,MySQLDialect,DerbyDialect-->          <plugin interceptor="com.***.project.common.mybatis.interceptor.OffsetLimitInterceptor">              <property name="dialectClass" value="com.***.project.common.mybatis.dialect.OracleDialect"/>          </plugin>      </plugins><environments default="develop"><environment id="develop"><transactionManager type="com.***.project.utils.TransactionManager"></transactionManager><dataSource type="POOLED" ><property name="driver" value="oracle.jdbc.driver.OracleDriver" /><property name="url" value="jdbc:oracle:thin:@****:***" /><property name="username" value="***" /><property name="password" value="***" /></dataSource></environment></environments><mappers><mapper resource="mappers/MemberMapper.xml"/></mappers></configuration>

2,?TransactionManager类 自定义事务管理,主要是用作自动提交,autoCommit

?

public class TransactionManager implements TransactionFactory {@Overridepublic Transaction newTransaction(Connection conn, boolean autoCommit) {Transaction  tx = new JdbcTransaction(conn, true);return tx;}@Overridepublic void setProperties(Properties arg0) {}}

?3,下面是我的核心类 ,主要是获取sqlSession与Mapper接口

?

public class SessionFactory {private static SqlSessionFactory sessionFactory;private SessionFactory(){}static{String resource = "com/***/project/utils/mybatis.xml";Reader reader;try {reader = Resources.getResourceAsReader(resource);sessionFactory = new SqlSessionFactoryBuilder().build(reader);} catch (IOException e) {e.printStackTrace();}}public static SqlSession getSqlSession(){return sessionFactory.openSession();}public static Object getMapper(Class cls){return MapperProxy.newMapperProxy(cls, getSqlSession());}}

小结:把dao层分离可以进行快速的单元测试(严格来说是集成测试),但如果自动化运行所有的测试,也可以直接从spring容器中获取service进行测试,可参昭我的文章http://mingliang-luo.iteye.com/blog/1237351

热点排行