怎样应聘业务员:再讨论spring的单元测试

来源:百度文库 编辑:中财网 时间:2024/04/20 16:31:32

在我以前一篇文章关于spring的文章中仔细讨论过spring单元测试策略,根据最近一些经验。今天再写一点自己的经验:

1.需要把单元测试时不需要的东西拿掉,比如缓存,安全等,这就需要怎么仔细考虑spring的applicationContext.xml功能。

2.DAO与Service的测试需要使用不同的策略,一般来讲,DAO单元测试只测试一个DAO类,而service需要多个DAO来支撑,有时还需要别的service支持。因此需要为DAO与service分别定义两个基类。DAO一般不需要使用事务,因此DAO测试基类继承AbstractDependencyInjectionSpringContextTests;而service需要,Service测试基类继承AbstractTransactionalDataSourceSpringContextTests

3.那怎么简化开发人员编写单元测试类呢?若每次都需要写很多,那他们自然不愿意写,所以架构师应该简化单元测试的编程模型上下功夫。一个原则:每个人只添加自己想要的,必要时可以覆盖全部的配置文件,完全自己来写,下面是我写的两个测试基类的demo


DAO测试基类

  1. public abstract class AbstractDAOTestCase extends
  2.         AbstractDependencyInjectionSpringContextTests {
  3.     public AbstractDAOTestCase() {
  4.         this.setAutowireMode(AUTOWIRE_BY_NAME);
  5.     }
  6.     @Override
  7.     protected String[] getConfigLocations() {
  8.         String[] baseConfigs = new String[]{ "/spring/applicationContext.xml" };
  9.         String[] extentConfigs = getExtentConfigs();
  10.         int length = baseConfigs.length + extentConfigs.length;
  11.         String[] allConfigs = new String[length];
  12.         for (int i = 0; i < baseConfigs.length; i++) {
  13.             allConfigs[i] = baseConfigs[i];
  14.         }
  15.         for (int i = 0; i < extentConfigs.length; i++) {
  16.             allConfigs[i + baseConfigs.length] = extentConfigs[i];
  17.         }
  18.         return allConfigs;
  19.     }
  20.     //开发人员可以覆盖这个方法,添加自己的配置文件
  21.     protected String[] getExtentConfigs() {
  22.         return new String[] {};
  23.     }
  24. }

Service测试基类

  1. public abstract class AbstractServiceTestCase extends
  2.         AbstractTransactionalDataSourceSpringContextTests {
  3.     protected UserDAO userDAO;
  4.     public AbstractServiceTestCase() {
  5.         this.setAutowireMode(AUTOWIRE_BY_NAME);
  6.     }
  7.     @Override
  8.     protected String[] getConfigLocations() {
  9.         String[] baseConfigs = new String[] { "spring/applicationContext.xml",
  10.                 "spring/applicationContext-transaction.xml",
  11.                 "org/codehaus/xfire/spring/xfire.xml",
  12.                 "spring/applicationContext-xfire.xml",
  13.                 "spring/applicationContext-osworkflow.xml",
  14.                 "spring/platform/*.xml" };
  15.         String[] extentConfigs = getExtentConfigs();
  16.         int length = baseConfigs.length + extentConfigs.length;
  17.         String[] allConfigs = new String[length];
  18.         for (int i = 0; i < baseConfigs.length; i++) {
  19.             allConfigs[i] = baseConfigs[i];
  20.         }
  21.         for (int i = 0; i < extentConfigs.length; i++) {
  22.             allConfigs[i + baseConfigs.length] = extentConfigs[i];
  23.         }
  24.         return allConfigs;
  25.     }
  26.     //开发人员可以覆盖这个方法
  27.     protected String[] getExtentConfigs() {
  28.         return new String[] {};
  29.     }
  30.     public void setUserDAO(UserDAO userDAO) {
  31.         this.userDAO = userDAO;
  32.     }
  33. }