`
eddysheng
  • 浏览: 111778 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

测试配置为连接数据源单独的jar

 
阅读更多

问题描述

 

以前我们做的项目基于未来适应多项目的要求进行了产品/ 项目的分拆,项目可以重复利用产品的产出。这 样就需要对代码进行分离,分离后产品对外提供的接口暂时包括EJB 接口、SOAP 接口、JMS 接口以及直接的jar 提供。前三种方式在独立的产品环境很容 易进行功能测试,但是对于直接提供的jar 中代码如何测试呢?jar 中包括service (基于spring 和独立的)、daoibatis )等逻辑, 讨厌的是ibatis 中连接配置的是weblogicdatasource ,因为采用的这种方式,单元测试和功能测试都很麻烦,单元测试需要修改连接数据库的方式;功能测试,jar 又没有暴露任何对外接口,要测试它怎么办?

 

背景

 

1 。无论是单元测试还是功能测试都是我们CI 环境的一部分,因此需要统计其覆盖率。

2 。无论什么测试,都不能影响最终产出的jar 文件(不增不减代码)。

3 。所有的service 层都分为接口和实现。

 

解决方案(临时)

 

1 。做单元测试

   ibatis 的连接数据库的方式改为直接连,而不通过datasource ,而在测试完毕后通过ant 脚本将连接方式改为datasource 连接。

 

    优点:可以进行测试,覆盖率可以统计到,没有影响最终产出。

    缺点:SVN 中存在的ibatis 的配置文件是错误的,需要通过ant 进行修改,增加了复杂性。

 

2 。做功能测试

    如果jar 中代码对其他第三方jar 没有依赖,可以直接在weblogic 启动时中加载这个jar ,然后通过Hessian 来暴露这些service ,然后写client 进行测试。

    我们的jar 要依赖很多第三方jar ,如果通过上面的方式,会在启动时加载jar 时报错,除非在启动时也加载这些依赖jar ,但是这样又跟我们已经存在的 warear 中的jar 产生冲突,因此决定将产出的独立jar 结合其依赖的jar 以及利用hessian 做成一个独立的war ,发布后,写client 进行测试。

 

    优点:可以进行测试,覆盖率可以统计到,没有影响最终产出,没有影响任何已存在的代码,包括svn 中的原代码。

    缺点:额外的增加了一个测试war 的工作量。

 

最后,我们选择了方案2 ,原因是不影响已经存在的东西,而且新的方案实施起来也很简单。

 

下面是方案2 的实施细节:

 

对于单独的不依赖springservice ,仅通过new XXXService 就可以执行的接口,只需要做如下配置即可,在测试warweb.xml 中:

   

<servlet>
        <servlet-name>axisService</servlet-name>
        <servlet-class>com.caucho.hessian.server.HessianServlet</servlet-class>
        <init-param>
            <param-name>home-class</param-name>
            <param-value>com.bitfone.smartdm.facade.service.impl.CCManagementServices</param-value>
        </init-param>
        <init-param>
            <param-name>home-api</param-name>
            <param-value>com.bitfone.smartdm.facade.service.ICCManagementServices</param-value>
        </init-param>
    </servlet>   

    <servlet-mapping>
        <servlet-name>axisService</servlet-name>
        <url-pattern>/axisService</url-pattern>       
    </servlet-mapping>
 

 

war 发布后,如下测试

   

public void testGetAllValidReleasedUpdatePackageById() throws Exception{
        String url = "http://16.158.48.31:8001/odtest/axisService";

        HessianProxyFactory factory = new HessianProxyFactory();
        ICCManagementServices cc = (ICCManagementServices) factory.create(ICCManagementServices.class, url);


        String ap = cc.getAllValidReleasedUpdatePackageById(10001);
       
        assertEquals(ap, "10001");
    }
 

 

对 于依赖springservice ,原先我们就有singletonServiceFactory 进行spring 配置的加载以及bean 的获取,因 此在war 中增加一个service 接口和实现,对于原service 的方法进行代理。(增加的service 接口和实现是在测试的war 中, 而不是原有的代码中)。

增加的接口和实现如下:

public interface IOdomainService {

   public String getGroupNameById(String groupId);
}
 


import com.bitfone.smartdm.facade.service.IBulkServices;
import com.bitfone.smartdm.facade.util.ServiceFactory;
import com.bitfone.smartdm.odomain.test.service.IOdomainService; 

public class OdomainService implements IOdomainService { 

    public String getGroupNameById(String groupId){
       IBulkServices bs = (IBulkServices)ServiceFactory.getInstance().getService(IBulkServices.class); 

        String groupName = bs.getGroupNameById(groupId);      

        return groupName;

    }

}
 

 

 

然后进行如下web.xml 配置

   

<servlet>
        <servlet-name>odomainService</servlet-name>
        <servlet-class>com.caucho.hessian.server.HessianServlet</servlet-class>
        <init-param>
            <param-name>home-class</param-name>
            <param-value>com.bitfone.smartdm.odomain.test.service.impl.OdomainService</param-value>
        </init-param>
        <init-param>
            <param-name>home-api</param-name>
            <param-value>com.bitfone.smartdm.odomain.test.service.IOdomainService</param-value>
        </init-param>
    </servlet>

    <servlet-mapping>
        <servlet-name>odomainService</servlet-name>
        <url-pattern>/odomainService</url-pattern>       
    </servlet-mapping>
 

 

最后测试代码如下

   

public void testGetGroupNameById() throws Exception{
        String url = "http://16.158.48.31:8001/odtest/odomainService";

        HessianProxyFactory factory = new HessianProxyFactory();
        IOdomainService os = (IOdomainService) factory.create(IOdomainService.class, url);

        String groupName = os.getGroupNameById("42287");
       
        assertNotNull(groupName);
       
        assertEquals(groupName, "go2");
    }
 

 

更好的解决方案,期待您的share

 

参考http://hessian.caucho.com/#Documents

分享到:
评论

相关推荐

    kettle连接oracle所需jar包

    - Kettle支持复杂的SQL查询,数据预处理,数据清洗,以及与其他数据源的数据整合。 总结,Kettle连接Oracle需要正确的JDBC驱动(如ojdbc.jar),将其置于Kettle的类路径下,并在Kettle的数据库连接设置中正确配置...

    Websphere下oracle连接池的配置

    7. **数据库连接字符串**:在配置数据源时,需要提供连接数据库的URL,例如`jdbc:oracle:thin:@192.168.1.16:1521:orcl`,包含了数据库服务器IP、端口和数据库名称。 8. **数据存储器Helper类名**:指定Oracle 10g...

    海豚调度,dolphinscheduler-data-quality-dev-SNAPSHOT最新版本3.1.1

    如果要用到MySQL数据,需要将pom.xml中MySQL的scope注释掉 当前只测试了MySQL、PostgreSQL和HIVE数据源,其他数据源暂时未测试过 Spark需要配置好读取Hive元数据,Spark不是采用jdbc的方式读取Hive

    使用dbcp需要用到的jar包

    2. 配置连接池:创建一个`BasicDataSource`实例并设置相关属性,如数据库URL、用户名、密码、最大连接数、最小连接数、超时时间等。 3. 获取连接:通过调用`BasicDataSource`的`getConnection()`方法,从连接池中...

    数据库连接池c3p0所需jar包

    C3P0是一个开源的JDBC连接池,由Miquel Armand设计并维护,它提供了数据源和JNDI绑定的DataSource实现。 C3P0的主要特点包括: 1. **连接测试**:C3P0允许在连接分配给客户端之前进行有效性测试,以确保获取到的...

    c3p0连接池jar包及jdbc驱动 jar包

    4. **使用数据库连接**:在业务逻辑中,从数据源获取连接,执行SQL语句,然后关闭连接。但通常无需手动关闭,因为C3P0会自动管理这些连接的生命周期。 5. **关闭数据源**:在应用关闭时,需要调用数据源的`close()`...

    Spring+SpringMVC+myBatis三大框架整合所需最新jar包

    7. **配置数据源**:设定数据源,如Druid、Apache Commons DBCP等,以连接数据库。 8. **测试**:编写单元测试或集成测试,验证SSM整合是否成功,如Controller、Service、DAO层的功能是否正常运行。 9. **日志与...

    ssh双数据源登录实例

    - 为每个数据源创建单独的SessionFactory,每个SessionFactory配置相应的数据库连接信息。 - 在SessionFactory的配置中,确保实体类的映射文件和HBM文件正确引用。 3. **配置Struts2**: - 创建两个Action类,每...

    spring+jpa+atomikos多数据源

    2. 配置数据源:为每个数据库创建单独的数据源,如DataSource bean,分别配置连接信息(URL、用户名、密码等)。 3. 配置事务管理器:使用Atomikos的UserTransaction和TransactionManager,配置JTA事务管理器,以...

    PB 通过JDBC连接SQLite

    要利用PB连接到SQLite,我们需要在PB环境中配置数据源,并创建一个JDBC驱动程序类,这通常是在数据源定义的“ODBC/JDBC”选项卡中完成的。 其次,JDBC是Java平台的标准接口,用于连接各种类型的数据库。它提供了一...

    SSH框架整合jar包

    5. **配置Hibernate**:创建Hibernate的配置文件(如`hibernate.cfg.xml`),定义实体类和数据源。 6. **整合连接**:在Spring中配置Hibernate SessionFactory,使Spring管理Hibernate事务。 7. **测试运行**:编写...

    源码部署JAR包

    "源码部署JAR包"这个标题暗示了我们需要关注的是与Openfire3.9.1版本相关的Java Archive(JAR)文件,这些文件是Java程序的打包形式,包含类文件、资源文件以及元数据。 描述中提到有6个JAR包,可能包括了Openfire...

    补充 数据库连接池.ppt

    在使用DBCP或C3P0时,通常需要配置数据源,例如设置最小和最大连接数,超时参数等。然后,通过DataSource的getConnection()方法获取连接,使用完毕后调用Connection的close()方法,但实际上连接并未真正关闭,而是...

    java数据库连接池

    4. **编写测试代码**:为了验证配置是否成功,可以创建一个简单的Java类,如`OracleClient`,使用JNDI(Java Naming and Directory Interface)查找并获取数据源,然后从数据源中获取数据库连接。示例代码如下: ``...

    tomcat6.0_+_myeclipse8.5_+_jdk_1.6完整配置环境与数据库连接(很详细).doc

    - **配置数据源**: 在 MyEclipse 中配置数据源,提供数据库连接信息(如 URL、用户名和密码)。 - **编写连接代码**: 在 Java 代码中使用 JDBC API 编写数据库连接和操作代码。 #### 总结 通过上述步骤,我们完成...

    Hibernate3.2连接池

    配置时,需要在服务器的配置文件(如`context.xml`)中定义数据源,然后在Hibernate配置文件中通过JNDI查找该数据源。这种方式对服务器的配置要求较高,但可以实现更细粒度的管理和监控。 在选择连接池时,应考虑...

    DB_SOURCE.rar

    数据源管理工具是一种用于高效管理和监控数据库连接的软件,它为开发者和系统管理员提供了一种统一的方式来管理和控制数据库连接。本项目"DB_SOURCE"是一个基于Maven构建的源码实现,旨在提供对主流数据库如MySQL、...

    spring3.1+hibernate4.1+struts2整合jar包

    然后,在`applicationContext.xml`中配置Spring的Bean,包括数据源、事务管理器、Hibernate SessionFactory等。 2. **配置Hibernate**:在Spring配置文件中,需要创建SessionFactory的Bean,指定Hibernate的配置...

    s2sh配置文件包

    Spring的配置文件通常是`applicationContext.xml`,在这里可以声明Bean、配置事务管理、数据源、DAO和Service等。Spring与Struts 2的集成可以使得Action类作为Spring的Bean,实现依赖注入,提高代码的可测试性和可...

    不是maven下的SSM环境配置

    4. **数据库连接与配置**:根据实际使用的数据库(如MySQL、Oracle等),下载相应的JDBC驱动,并在`applicationContext.xml`中配置数据源。例如,对于MySQL,可以使用`com.mysql.jdbc.Driver`,并提供数据库连接URL...

Global site tag (gtag.js) - Google Analytics