标签:
代码中引入单元测试,理论上是正确的,但是还没有实践过。但是从产品的角度去考虑的话,单元测试的必要性是很高的,“重构”这个东西听了好多,但是在公司内部,敢做重构的人估计不多,我曾经做过小功能的重构,那也是在比较熟悉这个功能的基础上做得,但是对于不规范、逻辑混乱的代码,估计就没人敢动手了,所以对于重构,其实是需要手段保证的,单元测试不能完全保证代码的各个层面重构,但是一定程度上是可以起到作用的。
基于上面的考虑,我考虑对service层做单元测试,起码保证服务层是有重构的空间。
从零开始研究junit,看了些junit的资料,然后自己写了一个单元测试的例子,其中关键的问题是模拟应用服务器提供jndi类型的数据源服务,这块功能使用了spring-mock.jar提供的SimpleNamingContext类,看完之后,发现还是比较简单。不多说,直接上类了。
AppServiceImplTest:单元测试类
import org.junit.BeforeClass; import util.DataSourceUtil; public class AppServiceImplTest { @BeforeClass public static void setUpBeforeClass() throws Exception { DataSourceUtil.initSqlUtilDataSource(DataSourceUtil.DATA_SOURCE_PROVIDE_TYPE_JNDI); } }
单元测试的类方法就没放出来了,上面的serUpBeforeClasss方法里面,提供了数据源的初始化,之后就可以写自己的测试方法了。
DataSourceUtil:数据源模拟工具
import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; import javax.sql.DataSource; import org.apache.commons.lang.StringUtils; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.mock.jndi.SimpleNamingContextBuilder; /** * 数据源模拟工具 * @author psy */ public final class DataSourceUtil { /** * 数据源提供类型-JNDI */ public final static String DATA_SOURCE_PROVIDE_TYPE_JNDI = "JNDI"; public static void emptyActivatedContextBuilder(){ try { SimpleNamingContextBuilder.emptyActivatedContextBuilder(); } catch (NamingException e) { e.printStackTrace(); } } /** * 初始化JNDI数据源 * @throws Exception */ public static void initDataSourceByJndi(String jndiName) throws Exception{ ApplicationContext ctx = new ClassPathXmlApplicationContext("jndi-config.xml"); DataSource ds = (DataSource) ctx.getBean("dataSource"); Context context = new InitialContext(); context.bind(jndiName,ds); context.bind("java:comp/env/"+jndiName,ds); } /** * 按照数据源提供类型初始化SqlUtil数据源 */ public static void initSqlUtilDataSource(String dataSourceType)throws Exception{ if(StringUtils.equals(DATA_SOURCE_PROVIDE_TYPE_JNDI, dataSourceType)){ emptyActivatedContextBuilder(); initDataSourceByJndi("jdbc/test"); } } }
大概就是这么个鬼了,单元测试实际的应用研究还在以后的时间里。
标签:
原文地址:http://my.oschina.net/psuyun/blog/488924