首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

用Spring2.5进展单元测试

2012-10-25 
用Spring2.5进行单元测试Spring2.5为测试提供了全新的TestContext Framework,在Spring2.5中可以利用注解编

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

关键字:Spring2.5,Unit Test,JUnit4.4;


内容:
要创建一个基于Spring2.5的JUnit4.4测试用例其实相当简单,主要进行以下几步的工作:
(1)创建一个扩展自AbstractTransactionalJUnit4SpringContextTests的类,该基类是Spring2.5为方便在JUnit4环境进行事务测试的类,它还提供了一个simpleJdbcTemplate属性让你可以方便地操控数据库表,便于对测试数据进行有效的操作;
(2)用@ContextLocation注解指定你要加载的Spring配置信息所在的位置;(默认的加载文件信息请参阅Spring Documentation);
(3)用@Autowired或@Resource注解注入你的Service接口,@Autowrired是指按类型将Spring Bean注入;而@Resource则按名称将Spring Bean注入。
(4)用@Before准备待测试的数据,如果我们的数据库表结构没有任何数据,则可以在这里预先插入记录,以便进行单元测试,当整个测试完成后,这些数据都不会被保留在数据库中。
(5)在需要进行测试的方法上使用JUnit4.4提供的@Test注解进行标示;

下面我们以一个例子来说明如何编写一个测试用例:
<1>示例信息
假设我们有一个名为TrainProjectService的服务类需要进行单元测试,该Service接口的方法如清单1-1所示:
清单1-1
public interface TrainProjectService {

     //根据ID获取培训项目信息
     public TrainProject getTrainProjectById(Integer trainProjectId);
     …
}

Spring配置信息如清单1-2所示:
清单1-2
/cn/com/suhao/test/train/conf/applicationContext-train-service.xml

<bean   id="trainProjectService"
ref="trainProjectDao" />
</bean>


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

<bean   id="trainProjectDao"
parent="parentDao" />


<2>测试用例
@ContextConfiguration(locations={"/cn/com/suhao/test/appconf/applicationContext.xml",
          "/cn/com/suhao/test/train/conf/applicationContext-*.xml"
         }
)
public class TestTrainProjectService extends AbstractTransactionalJUnit4SpringContextTests {

     @Autowired
     private TrainProjectService trainProjectService;
     private Integer projectId;
   
     @Before
     public void prepareTestData() {
         final String   sql = "insert into train_project(project_name, project_attendee) values('English Test', 'Mike')";
         KeyHolder keyHolder = new GeneratedKeyHolder();
         simpleJdbcTemplate.getJdbcOperations().update(
             new PreparedStatementCreator() {
                 public PreparedStatement createPreparedStatement(Connection conn)
                     throws SQLException {
                     PreparedStatement ps = conn.prepareStatement(sql);
                     return ps;
                 }
             }, keyHolder);
         projectId = keyHolder.getKey().intValue();
     }
   
     @Test
     public void testGetTrainProject() {
         TrainProject trainProject = trainProjectService.getTrainProjectById(projectId);
         Assert.notNull(trainProject);
     }
   
     }
1 楼 CoderDream 2009-04-16   如果能提供完整工程(可由eclipse直接导入),哪怕功能再简单(只是简单的增删改查),那样也对初学者更有帮助! 2 楼 beckrabbit 2009-04-17   单元测试最近都用groovy gmock了 3 楼 fangwei 2009-05-05   请问,如果我将struts2的action交给spring管理,那么能够使用类似的方式来测试action吗?也就是我能够从spring中直接获取到一个可用的action吗?望赐教。 4 楼 Aguo 2009-05-12   貌似不用这么复杂的写法 5 楼 flyingsword945 2009-05-12   <script>alert('If you see this you have a potential vulnerability');</script>

热点排行