用Spring2.5进行单元测试

Spring2.5为测试提供了全新的TestContextFramework,在Spring2.5中可以利用注解编写测试用例,本文不会讨论TestContextFramework的信息,仅以一个实际例子来说明如何编写测试用例。

关键字:Spring2.5,UnitTest,JUnit4.4;

内容:

要创建一个基于Spring2.5的JUnit4.4测试用例其实相当简单,主要进行以下几步的工作:

(1)创建一个扩展自AbstractTransactionalJUnit4SpringContextTests的类,该基类是Spring2.5为方便在JUnit4环境进行事务测试的类,它还提供了一个simpleJdbcTemplate属性让你可以方便地操控数据库表,便于对测试数据进行有效的操作;

(2)用@ContextLocation注解指定你要加载的Spring配置信息所在的位置;(默认的加载文件信息请参阅SpringDocumentation);

(3)用@Autowired或@Resource注解注入你的Service接口,@Autowrired是指按类型将SpringBean注入;而@Resource则按名称将SpringBean注入。

(4)用@Before准备待测试的数据,如果我们的数据库表结构没有任何数据,则可以在这里预先插入记录,以便进行单元测试,当整个测试完成后,这些数据都不会被保留在数据库中。

(5)在需要进行测试的方法上使用JUnit4.4提供的@Test注解进行标示;

下面我们以一个例子来说明如何编写一个测试用例:

<1>示例信息

假设我们有一个名为TrainProjectService的服务类需要进行单元测试,该Service接口的方法如清单1-1所示:

清单1-1

publicinterfaceTrainProjectService{

//根据ID获取培训项目信息

publicTrainProjectgetTrainProjectById(IntegertrainProjectId);

}

Spring配置信息如清单1-2所示:

清单1-2

/cn/com/suhao/test/train/conf/applicationContext-train-service.xml

<beanid="trainProjectService"

class="cn.com.suhao.test.train.service.impl.TrainProjectServiceImp">

<propertyname="trainProjectDao"ref="trainProjectDao"/>

</bean>

/cn/com/suhao/test/train/conf/applicationContext-train-dao.xml

<beanid="trainProjectDao"

class="cn.com.suhao.test.train.dao.impl.TrainProjectDAOImp"parent="parentDao"/>

<2>测试用例

@ContextConfiguration(locations={"/cn/com/suhao/test/appconf/applicationContext.xml",

"/cn/com/suhao/test/train/conf/applicationContext-*.xml"

}

)

publicclassTestTrainProjectServiceextendsAbstractTransactionalJUnit4SpringContextTests{

@Autowired

privateTrainProjectServicetrainProjectService;

privateIntegerprojectId;

@Before

publicvoidprepareTestData(){

finalStringsql="insertintotrain_project(project_name,project_attendee)values('EnglishTest','Mike')";

KeyHolderkeyHolder=newGeneratedKeyHolder();

simpleJdbcTemplate.getJdbcOperations().update(

newPreparedStatementCreator(){

publicPreparedStatementcreatePreparedStatement(Connectionconn)

throwsSQLException{

PreparedStatementps=conn.prepareStatement(sql);

returnps;

}

},keyHolder);

projectId=keyHolder.getKey().intValue();

}

@Test

publicvoidtestGetTrainProject(){

TrainProjecttrainProject=trainProjectService.getTrainProjectById(projectId);

Assert.notNull(trainProject);

}

}

相关推荐