springtest-junit-jidi--测试接口
一,问题分析
假如在一个项目中要测试一个接口,但是这个项目没有对外开放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&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&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&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&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--测试接口的更多相关文章
- 【drp 11】使用Junit简单测试接口方法
一.Junit简介 JUnit是一个Java语言的单元测试框架.它由Kent Beck和Erich Gamma建立,逐渐成为源于Kent Beck的sUnit的xUnit家族中最为成功的一个. JUn ...
- JAVAEE——spring02:使用注解配置spring、sts插件、junit整合测试和aop演示
一.使用注解配置spring 1.步骤 1.1 导包4+2+spring-aop 1.2 为主配置文件引入新的命名空间(约束) 1.3 开启使用注解代替配置文件 1.4 在类中使用注解完成配置 2.将 ...
- spring-注解配置-junit整合测试-aop
1 使用注解配置spring 1.1 步骤 导包4+2+spring-aop 1.为主配置文件引入新的命名空间(约束) 2.开启使用注解代理配置文件 3.在类中使用注解完成配置 1.2 将对象注册到容 ...
- JUnit5依赖注入与测试接口
依赖注入 以前的JUnit的类构造方法和测试方法都是不能有参数的,JUnit Jupiter有一个颠覆性的改进,就是允许它们有入参,这样就能做依赖注入了. 如果你对pytest的fixture有了解的 ...
- JUnit中测试异常抛出的方法
最近在做TWU关于TDD的作业,对JUnit中测试异常抛出的方法进行了一些学习和思考. 在进行单元测试的时候有的时候需要测试某一方法是否抛出了正确的异常.例如,我有一个方法,里面对一个List进行读取 ...
- junit参数化测试的使用方法
JUnit参数化测试的五个步骤:(1)为准备使用参数化测试的测试类指定特殊的运行器 org.junit.runners.Parameterized.(2)为测试类声明几个变量,分别用于存放期望值和测试 ...
- 使用Hamcrest增强JUnit的测试能力
package com.jadyer.service; import java.util.HashMap; import java.util.Map; import org.hamcrest.Matc ...
- junit参数化测试
在前面的junit4初体验中我就说过,junit参数化测试是一只小怪兽,只逼编码痛点,现在我们这里来整理一下. 看过我前面的那篇初体验的就会发现一个问题,我们的测试代码大量的重复了.在这里先贴出原来的 ...
- 接口测试基础(fiddler、postman的使用、python实现测试接口程序)
写在前面:本文主要的章节规划: 1.什么是接口测试 另外,有的时候会直接调用别的公司的接口,比如银行的.淘宝的.支付宝的,此时也需要做接口测试以及验证数据: 做接口测试的好处: 其中, ...
- swagger-ui中测试接口(enum传值) 报400错误
swagger-ui中测试接口(enum传值) 报400错误 PriceRuleController: @PostMapping("/update") @ApiOperation( ...
随机推荐
- BZOJ 1937: [Shoi2004]Mst 最小生成树 [二分图最大权匹配]
传送门 题意: 给一张无向图和一棵生成树,改变一些边的权值使生成树为最小生成树,代价为改变权值和的绝对值,求最小代价 线性规划的形式: $Min\quad \sum\limits_{i=1}^{m} ...
- POJ 1830 开关问题 [高斯消元XOR]
和上两题一样 Input 输入第一行有一个数K,表示以下有K组测试数据. 每组测试数据的格式如下: 第一行 一个数N(0 < N < 29) 第二行 N个0或者1的数,表示开始时N个开关状 ...
- 万类之父——Object
jdk1.8.0_144 Object类作为Java中的顶级类,位于java.lang包中.所有的类直接或者间接都继承自它.所以Object类中的方法在所有类中都可以直接调用.在深入介绍它的API时, ...
- Zabbix的网络发现
Zabbix的网络发现 Zabbix的网络发现功能,可以让我们发现网络中的主机或者服务,并在发现该设备后做出相应的操作; 它可以用HTTP.ICMP.SSH.LDAP.TCP.SNMP.Telne ...
- 通过SVG与CSS3实现向上图标
需求 H5活动页需要用的图标很少,暂时没有使用iconfont的必要性,而通过图片的话额外增加UI的工作量以及增加请求数,前端也有很多实现简单图标的方法,所以就尝试自己去解决,写一个"返回顶 ...
- Linux用于嵌入式
步骤1:Linux工具和项目布局 每个嵌入式软件设计都从选择合适的工具开始. 工具链是一组连接(或链接)在一起的软件开发工具,它包含诸如GNU编译器集合(GCC).binutils(一组包括连接器.汇 ...
- PLECS_直流电机基本系统模型
1.模型图 2.模型仿真结果 (1)Step阶跃t=1s,R=20Ω,V_dc = 120V,那么此时 电源电压波形: 电机电枢电流波形: 电机电磁转矩: 电机转速波形: (2)其他参数不变将R=30 ...
- HTML/CSS 知识点
整个前端开发的工作流程 产品经理提出项目需求 UI出设计稿 前端人员负责开发静态页面(跟前端同步的后台人员在准备数据) 前后台的交互 测试 产品上线(后期项目维护) 互联网原理 当用户在浏览器输入网址 ...
- 使用maven搭建hibernate的pom文件配置
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...
- .net core 2.0学习笔记(二):部署到Windows和Liunx系统
.Net Core最大的亮点就是跨平台了,下面介绍下在Windows下和Liunx下的部署. 首先发布项目文件,点击网站项目右键 发布: 从下图发布的文件图片可以看出,不像以前bin目录下有很多dll ...