一,问题分析

假如在一个项目中要测试一个接口,但是这个项目没有对外开放url地址,话句话就是说浏览器访问不了里面的资源,自己造的数据不能测试接口,那么只能等别人来调用自己的接口,而且自己也不能测试,假如单纯的通过junit来测试的话,那么是无法加载IOC容器里面的东西,话句话就是说加载不了原来在tomcat启动的时候,加载xml的文件,applicationcontext容器里面的东西加载不了,所以用springtest,但是问题又来了,现在数据源是通过jidi来配置在tomcat里面的,怎么能加载到项目以外的东西呢?

二,代码分析

2.1,原来的/src/main/resources/context/init/context-ds.xml

 <?xml version="1.0" encoding="UTF-8"?>
 <beans  xmlns="http://www.springframework.org/schema/beans"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
     xmlns:context="http://www.springframework.org/schema/context"
     xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
             http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
             http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
             http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">

      <bean id="dataSource" class="com.bill99.boss.ds.util.DynamicDataSource" >
         <property name="targetDataSources">
             <map key-type="java.lang.String">
                 <entry key="appmobile" value-ref="mobileDS" ></entry>
                 <entry key="org" value-ref="bossDS" ></entry>
             </map>
         </property>
         <property name="defaultTargetDataSource" ref="defaultDataSource" >
         </property>
     </bean>   

     <bean id="defaultDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
25         <property name="jndiName" value="java:comp/env/BILL99/JDBC/SEASHELL" />
26     </bean>
27
28     <bean id="mobileDS" class="org.springframework.jndi.JndiObjectFactoryBean">
29         <property name="jndiName" value="java:comp/env/BILL99/JDBC/WX-PORTAL" />
30     </bean>
31
32     <bean id="bossDS" class="org.springframework.jndi.JndiObjectFactoryBean">
33         <property name="jndiName" value="java:comp/env/BILL99/JDBC/ORG" />
34     </bean>

     <bean id="orgjdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
         <constructor-arg ref="bossDS" />
     </bean>

     <bean id="appmobilejdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
         <constructor-arg ref="mobileDS" />
     </bean>

     <bean id="seashelljdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
         <constructor-arg ref="defaultDataSource" />
     </bean>

     <bean id="dataSourceProxy" class="org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy">
         <constructor-arg ref="defaultDataSource"></constructor-arg>
     </bean>

     <alias name="dataSourceProxy" alias="seashellDS" />
     <alias name="dataSourceProxy" alias="authenticationDS" />
     <alias name="dataSourceProxy" alias="authorizationDS" />
     <alias name="dataSourceProxy" alias="logDS" />
     <alias name="dataSourceProxy" alias="accountingDS" />
     <alias name="dataSourceProxy" alias="cosDS" />
     <alias name="dataSourceProxy" alias="metadataDS" />
     <alias name="dataSourceProxy" alias="notificationDS" />
     <alias name="dataSourceProxy" alias="productDS" />
     <alias name="dataSourceProxy" alias="marketingDS" />
     <alias name="dataSourceProxy" alias="memberappDS" />
     <alias name="dataSourceProxy" alias="gatewayDS" />
     <alias name="dataSourceProxy" alias="pseDS" />
     <alias name="dataSourceProxy" alias="fundoutDS" />
     <alias name="dataSourceProxy" alias="memberinfoDS"/>

     <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
         <constructor-arg ref="dataSource" />
     </bean>

     <bean id="transactionManager"
         class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
         <property name="dataSource" ref="bossDS" />
         <property name="globalRollbackOnParticipationFailure" value="false" />
     </bean>
     <aop:config>
         <aop:advisor
             pointcut="@within(org.springframework.transaction.annotation.Transactional)"
             advice-ref="txAdvice" order="1"/>
     </aop:config>

     <tx:advice id="txAdvice">
         <tx:attributes>
             <tx:method name="getToAuthList" propagation="REQUIRES_NEW"/>
             <tx:method name="*" rollback-for="java.lang.Exception"/>
         </tx:attributes>
     </tx:advice>

 </beans>

2.2,tomcat下的xml文件context.xml

 <?xml version="1.0" encoding="UTF-8"?>

     <WatchedResource>WEB-INF/web.xml</WatchedResource>      

 <Resource acquireIncrement="2" auth="Container" driverClass="org.gjt.mm.mysql.Driver" factory="com.bill99.seashell.encrypt.C3p0BeanFactory" idleConnectionTestPeriod="3600" jdbcUrl="jdbc:mysql://192.168.126.147:3306/boss?useUnicode=true&amp;characterEncoding=UTF-8" maxIdleTime="3600" maxPoolSize="30" minPoolSize="3" name="BILL99/JDBC/ORG" password="111111" type="com.mchange.v2.c3p0.ComboPooledDataSource" user="root"/>

 <Resource acquireIncrement="2" auth="Container" driverClass="org.gjt.mm.mysql.Driver" factory="com.bill99.seashell.encrypt.C3p0BeanFactory" idleConnectionTestPeriod="3600" jdbcUrl="jdbc:mysql://192.168.126.147:3306/appmobile?useUnicode=true&amp;characterEncoding=UTF-8" maxIdleTime="3600" maxPoolSize="30" minPoolSize="3" name="BILL99/JDBC/WX-PORTAL" password="111111" type="com.mchange.v2.c3p0.ComboPooledDataSource" user="root"/>

  <Resource acquireIncrement="2" auth="Container" driverClass="oracle.jdbc.driver.OracleDriver" factory="com.bill99.seashell.encrypt.C3p0BeanFactory" jdbcUrl="jdbc:oracle:thin:@192.168.127.121:1530:billdb" maxPoolSize="5" minPoolSize="3" name="BILL99/JDBC/SEASHELL121" password="seashell" type="com.mchange.v2.c3p0.ComboPooledDataSource" user="seashell"/> 

 </Context>

三,解决思路

3.1,jar包

         <dependency org="junit" name="junit" rev="4.12" conf="zip->default"/>
         <dependency org="org.hamcrest" name="hamcrest-core" rev="1.3" conf="zip->default"/>
         <dependency org="org.hamcrest" name="hamcrest-library" rev="1.3" conf="zip->default"/>
         <dependency org="org.springframework" name="spring-test" rev="3.2.13.RELEASE" conf="zip->default"/>

         <dependency org="org.springframework" name="spring-data-redis" rev="1.6.2.RELEASE" conf="zip->default"/>
        <dependency org="org.springframework" name="spring-aop" rev="3.2.13.RELEASE" conf="zip->default"/>
         <dependency org="org.springframework" name="spring-beans" rev="3.2.13.RELEASE" conf="zip->default"/>
         <dependency org="org.springframework" name="spring-context" rev="3.2.13.RELEASE" conf="zip->default"/>
         <dependency org="org.springframework" name="spring-context-support" rev="3.2.13.RELEASE" conf="zip->default"/>
         <dependency org="org.springframework" name="spring-core" rev="3.2.13.RELEASE" conf="zip->default"/>
         <dependency org="org.springframework" name="spring-expression" rev="3.2.13.RELEASE" conf="zip->default"/>
         <dependency org="org.springframework" name="spring-tx" rev="3.2.13.RELEASE" conf="zip->default"/>
         <dependency org="org.springframework" name="spring-aspects" rev="3.2.13.RELEASE" conf="zip->default"/>
         <dependency org="org.springframework" name="spring-jdbc" rev="3.2.13.RELEASE" conf="zip->default"/>
         <dependency org="org.springframework" name="spring-jms" rev="3.2.13.RELEASE" conf="zip->default"/>
         <dependency org="org.springframework" name="spring-orm" rev="3.2.13.RELEASE" conf="zip->default"/>
         <dependency org="org.springframework" name="spring-web" rev="3.2.13.RELEASE" conf="zip->default"/>
         <dependency org="org.springframework" name="spring-webmvc" rev="3.2.13.RELEASE" conf="zip->default"/>
         <dependency org="mysql" name="mysql-connector-java" rev="5.1.12" conf="zip->default"/>
         <dependency org="org.apache" name="catalina" rev="6.0.39" conf="compile->default"/>

3.2,/src/test/java/MdpTest.java测试类

 import javax.annotation.Resource;

 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.springframework.test.context.ContextConfiguration;
 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

 import com.bill99.boss.domain.external.message.builder.impl.SafetyBankUploadImpl;

 @RunWith(SpringJUnit4ClassRunner.class)  //使用junit4进行测试
 @ContextConfiguration(
         {
13             "classpath:context/init/envPropertyLoader.xml" ,
14             "classpath:context/init/context-ds.xml",
15             "classpath*:context/*.xml",
16             "classpath*:context/ibatis/*.xml",
17             "classpath*:context/service/*.xml",
18             "classpath:context/init/thunderClient.xml"

             }) //加载配置文件) //加载配置文件
 public class MdpTest {
     @Resource
     private SafetyBankUploadImpl SafetyBankUploadImpl;
     @Test
     public void test() {
         SafetyBankUploadImpl.buildPictureFile("812110058130012", "1");
         System.out.println("666");
     }
 }

classpath中的别乱了顺序,要严格按照原来的加载顺序来写。

3.3,/src/test/resources/context/init/context-ds.xml下的xml文件

 <?xml version="1.0" encoding="UTF-8"?>
 <beans  xmlns="http://www.springframework.org/schema/beans"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
     xmlns:context="http://www.springframework.org/schema/context"
     xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
             http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
             http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
             http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">

      <bean id="dataSource" class="com.bill99.boss.ds.util.DynamicDataSource" >
         <property name="targetDataSources">
             <map key-type="java.lang.String">
                 <entry key="appmobile" value-ref="mobileDS" ></entry>
                 <entry key="org" value-ref="bossDS" ></entry>
             </map>
         </property>
         <property name="defaultTargetDataSource" ref="defaultDataSource" >
         </property>
     </bean>
23
24     <bean id="defaultDataSource"
25             class="org.springframework.jdbc.datasource.DriverManagerDataSource"
26             p:driverClassName="oracle.jdbc.driver.OracleDriver"
27             p:url="jdbc:oracle:thin:@192.168.5.100:1530:billdb"
28             p:username="seashell" p:password="seashell" />
29
30     <bean id="mobileDS"
31             class="org.springframework.jdbc.datasource.DriverManagerDataSource"
32             p:driverClassName="org.gjt.mm.mysql.Driver"
33             p:url="jdbc:mysql://192.168.126.147:3306/appmobile?useUnicode=true&amp;characterEncoding=UTF-8"
34             p:username="root" p:password="111111" />
35
36     <bean id="bossDS"
37             class="org.springframework.jdbc.datasource.DriverManagerDataSource"
38             p:driverClassName="org.gjt.mm.mysql.Driver"
39             p:url="jdbc:mysql://192.168.126.147:3306/boss?useUnicode=true&amp;characterEncoding=UTF-8"
40             p:username="root" p:password="111111" />

     <bean id="orgjdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
         <constructor-arg ref="bossDS" />
     </bean>

     <bean id="appmobilejdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
         <constructor-arg ref="mobileDS" />
     </bean>

     <bean id="seashelljdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
         <constructor-arg ref="defaultDataSource" />
     </bean>

     <bean id="dataSourceProxy" class="org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy">
         <constructor-arg ref="defaultDataSource"></constructor-arg>
     </bean>

     <alias name="dataSourceProxy" alias="seashellDS" />
     <alias name="dataSourceProxy" alias="authenticationDS" />
     <alias name="dataSourceProxy" alias="authorizationDS" />
     <alias name="dataSourceProxy" alias="logDS" />
     <alias name="dataSourceProxy" alias="accountingDS" />
     <alias name="dataSourceProxy" alias="cosDS" />
     <alias name="dataSourceProxy" alias="metadataDS" />
     <alias name="dataSourceProxy" alias="notificationDS" />
     <alias name="dataSourceProxy" alias="productDS" />
     <alias name="dataSourceProxy" alias="marketingDS" />
     <alias name="dataSourceProxy" alias="memberappDS" />
     <alias name="dataSourceProxy" alias="gatewayDS" />
     <alias name="dataSourceProxy" alias="pseDS" />
     <alias name="dataSourceProxy" alias="fundoutDS" />
     <alias name="dataSourceProxy" alias="memberinfoDS"/>

     <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
         <constructor-arg ref="dataSource" />
     </bean>

     <bean id="transactionManager"
         class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
         <property name="dataSource" ref="bossDS" />
         <property name="globalRollbackOnParticipationFailure" value="false" />
     </bean>
     <aop:config>
         <aop:advisor
             pointcut="@within(org.springframework.transaction.annotation.Transactional)"
             advice-ref="txAdvice" order="1"/>
     </aop:config>

     <tx:advice id="txAdvice">
         <tx:attributes>
             <tx:method name="getToAuthList" propagation="REQUIRES_NEW"/>
             <tx:method name="*" rollback-for="java.lang.Exception"/>
         </tx:attributes>
     </tx:advice>

 </beans>

3.4,图示

/src/test/resources/context/init/context-ds.xml下的xml文件级别要高于

/src/main/resources/context/init/context-ds.xml下的jar包,名称一样的话包括包名,test中的会把main下的替换掉的。

3.5,如果还报错的话把/src/main/resources/context/init/context-ds.xml下的context-ds.xml文件也替换掉

3.6,添加数据库驱动jar包

3.7,假如有内存溢出的话,则这样配置一下。

-Xms512m -Xmx512m -XX:MaxNewSize=512m -XX:MaxPermSize=512m

springtest-junit-jidi--测试接口的更多相关文章

  1. 【drp 11】使用Junit简单测试接口方法

    一.Junit简介 JUnit是一个Java语言的单元测试框架.它由Kent Beck和Erich Gamma建立,逐渐成为源于Kent Beck的sUnit的xUnit家族中最为成功的一个. JUn ...

  2. JAVAEE——spring02:使用注解配置spring、sts插件、junit整合测试和aop演示

    一.使用注解配置spring 1.步骤 1.1 导包4+2+spring-aop 1.2 为主配置文件引入新的命名空间(约束) 1.3 开启使用注解代替配置文件 1.4 在类中使用注解完成配置 2.将 ...

  3. spring-注解配置-junit整合测试-aop

    1 使用注解配置spring 1.1 步骤 导包4+2+spring-aop 1.为主配置文件引入新的命名空间(约束) 2.开启使用注解代理配置文件 3.在类中使用注解完成配置 1.2 将对象注册到容 ...

  4. JUnit5依赖注入与测试接口

    依赖注入 以前的JUnit的类构造方法和测试方法都是不能有参数的,JUnit Jupiter有一个颠覆性的改进,就是允许它们有入参,这样就能做依赖注入了. 如果你对pytest的fixture有了解的 ...

  5. JUnit中测试异常抛出的方法

    最近在做TWU关于TDD的作业,对JUnit中测试异常抛出的方法进行了一些学习和思考. 在进行单元测试的时候有的时候需要测试某一方法是否抛出了正确的异常.例如,我有一个方法,里面对一个List进行读取 ...

  6. junit参数化测试的使用方法

    JUnit参数化测试的五个步骤:(1)为准备使用参数化测试的测试类指定特殊的运行器 org.junit.runners.Parameterized.(2)为测试类声明几个变量,分别用于存放期望值和测试 ...

  7. 使用Hamcrest增强JUnit的测试能力

    package com.jadyer.service; import java.util.HashMap; import java.util.Map; import org.hamcrest.Matc ...

  8. junit参数化测试

    在前面的junit4初体验中我就说过,junit参数化测试是一只小怪兽,只逼编码痛点,现在我们这里来整理一下. 看过我前面的那篇初体验的就会发现一个问题,我们的测试代码大量的重复了.在这里先贴出原来的 ...

  9. 接口测试基础(fiddler、postman的使用、python实现测试接口程序)

    写在前面:本文主要的章节规划: 1.什么是接口测试    另外,有的时候会直接调用别的公司的接口,比如银行的.淘宝的.支付宝的,此时也需要做接口测试以及验证数据: 做接口测试的好处:      其中, ...

  10. swagger-ui中测试接口(enum传值) 报400错误

    swagger-ui中测试接口(enum传值) 报400错误 PriceRuleController: @PostMapping("/update") @ApiOperation( ...

随机推荐

  1. BZOJ 4517: [Sdoi2016]排列计数 [容斥原理]

    4517: [Sdoi2016]排列计数 题意:多组询问,n的全排列中恰好m个不是错排的有多少个 容斥原理强行推♂倒她 $恰好m个不是错排 $ \[ =\ \ge m个不是错排 - \ge m+1个不 ...

  2. BZOJ 3895: 取石子[SG函数 搜索]

    有N堆石子 ·从某堆石子中取走一个 ·合并任意两堆石子 不能操作的人输. 100%的数据满足T<=100,  N<=50. ai<=1000   容易发现基础操作数$d=\sum a ...

  3. 51NOD 1821 最优集合 [并查集]

    传送门 题意: 一个集合S的优美值定义为:最大的x,满足对于任意i∈[1,x],都存在一个S的子集S',使得S'中元素之和为i. 给定n个集合,对于每一次询问,指定一个集合S1和一个集合S2,以及一个 ...

  4. HDU1005 找规律 or 循环点 or 矩阵快速幂

    http://acm.hdu.edu.cn/showproblem.php?pid=1005 1.一开始就注意到了n的数据范围 <=100 000 000,但是还是用普通的循环做的,自然TLE了 ...

  5. SDN第四次作业

    作业链接 1.阅读 了解SDN控制器的发展 http://www.sdnlab.com/13306.html http://www.docin.com/p-1536626509.html 了解ryu控 ...

  6. 怎样调整XenServer下面Linux虚拟机的磁盘大小

    登录到XenServer. 修改虚拟机磁盘大小修改storage 磁盘大小 启动虚拟机 修改分区大小Hex code (type L to list codes): 8eChanged system ...

  7. 日均数据量千万级,MySQL、TiDB两种存储方案的落地对比

    http://mp.weixin.qq.com/s?__biz=MzIzNjUxMzk2NQ==&mid=2247484743&idx=1&sn=04337e020d268a9 ...

  8. [业界良心系列] OI资料分享

    正式退役辣....混吃等死了这么久以后....终于也是必然的结果吧.... 分享一些资料: 链接:http://pan.baidu.com/s/1c1SRFmo 密码:bcfc 有一些资料有版权, 如 ...

  9. OpenCV角点检测goodFeaturesToTrack()源代码分析

    上面一篇博客分析了HARRIS和ShiTomasi角点检测的源代码.而为了提取更准确的角点,OpenCV中提供了goodFeaturesToTrack()这个API函数,来获取更加准确的角点位置.这篇 ...

  10. Taurus.MVC 2.2.3.4 :WebAPI 实现权限控制认证(及功能增强说明)

    前言: 前两天,当我还在老家收拾行旅,准备回广州,为IT连的创业再战365天时, 有网友扣上问:Taurus.MVC中如何实现认证和权限控制,最好能做个小例子. 我一不小心回了句:等回广州我再写篇文章 ...