- 浏览: 149687 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
sutongxuevip:
只更改driver的话,url中你需要指定时区等信息的
关于最新版MySQL的jdbc驱动包名(路径)引发的问题 -
sutongxuevip:
指定下maven中的mysql版本就不会出现这个问题了
关于最新版MySQL的jdbc驱动包名(路径)引发的问题
没有测试的程序,是不完整的,每一个从事写程序的人员,都应该坚持做单元测试,通过单元测试可以验证程序基本功能的有效性,从而保证整个系统的质量,功在一时,利在千秋。这里我们将尝试使用Junit和SpringTest,在之前的系统里添加测试功能。
第一步:JUnit与SpringTest的引入
JUnit故名知意,是一个专门为Java语言提供单元测试的框架。平时的开发过程中,单元测试会频繁的用到,所以在JUnit之上,Spring又做了进一步的封装,这个集成的测试模块也就是SpringTest。
SpringTest的使用可以避免频繁、重复的容器加载,这个使用起来会有很好的体验。它还可以不用像JUnit那样通过getBean()方法去容器里获取目标元素,直接就像在实际开发中一样,做好配置,写好标签就可以得到想要的结果。SpringTest还做了对数据库操作的回滚处理,这个在日常测试使用中相当实用,可以避免去数据库做频繁修改以确保环境正常。等等诸多,SpringTest能在强大的JUnit之上让我们更加方便的进行单元测试,来先看看他们所需的依赖包,打开pom文件,在dependencies里添加以下代码
就酱,更新系统,依赖的相应jar包会添加到系统,接下来我们写程序运行运行来看看效果。
第二步:JUnit测试验证
我们先来看看单独使用JUnit进行测试的样子,在src/test/java下,建立准备编写测试类的包,然后创建名为JunitTestUser的测试类,代码如下
这里边顺便提一下,这里使用的ClassPathXmlApplicationContext是spring读取xml比较常用的类,也可以直接用ApplicationContext,但共同的作用都是从spring的容器中获取所需的bean,我们这里获取了配置文件中的sqlSessionFactory,然后从这个连接池冲拿到数据库会话(SqlSession),继而我们可以得到所需的dao,通过这个dao我们可以进行对数据库的操作。
这里回顾下我们的applicationContext.xml内容,估计能帮助对这段代码的理解
OK,测试部分的代码写完之后,我们直接右键,Run As ,选中Junit Test
然后可以看到Eclipse的Junit栏运行之后会显示出一下的绿色条带
OK,这是成功的运行了代码,测试没问题,然后我们去Console栏,打印的日志里我们可以看到如下代码
嗯,名字tom已经被打印,好,我们已经完成用JUnit做的单元测试,下边来看看加入SpringTest是什么效果。
第三步:JUnit与SpringTest共同的尝试
紧接着我们创建一个名为SpringTestUser的测试类,代码如下
注意标签@RunWith(SpringJUnit4ClassRunner.class)说的是我们这段代码其实用的还是JUnit进行测试的。@ContextConfiguration({"classpath*:applicationContext.xml"})以标签的形式完成对配置文件的加载,接下来看代码,简直是爽爆了,简洁明了的逻辑,只要配置文件里做好了注入的配置,这里直接通过标签获取即可,OK,我们来运行下:右键,Run As ,选中Junit Test...Junit栏运行显示已经测试成功
我们去Console栏的日志里可以看到如下代码
OK,测试已完成!
第四步:小结
这里不想用太多华丽的词藻来吹嘘使用SpringTest带来的便利,仅仅对比代码的就可以看出,使用SpringTest的优势。实际使用过程中SpringTest集成的对事物的处理啊,对测试数据的回滚啊,仅通过一个标签就可以实现,那可是提供了实实在在的方便,感兴趣的可以试下。
第一步:JUnit与SpringTest的引入
JUnit故名知意,是一个专门为Java语言提供单元测试的框架。平时的开发过程中,单元测试会频繁的用到,所以在JUnit之上,Spring又做了进一步的封装,这个集成的测试模块也就是SpringTest。
SpringTest的使用可以避免频繁、重复的容器加载,这个使用起来会有很好的体验。它还可以不用像JUnit那样通过getBean()方法去容器里获取目标元素,直接就像在实际开发中一样,做好配置,写好标签就可以得到想要的结果。SpringTest还做了对数据库操作的回滚处理,这个在日常测试使用中相当实用,可以避免去数据库做频繁修改以确保环境正常。等等诸多,SpringTest能在强大的JUnit之上让我们更加方便的进行单元测试,来先看看他们所需的依赖包,打开pom文件,在dependencies里添加以下代码
<!-- ============== test begin ============== --> <dependency><!-- JUnit单元测试框架 --> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <dependency><!-- spring对测试框架的简单封装功能 --> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring.version}</version> <scope>test</scope> </dependency> <!-- ============== test end ============== -->
就酱,更新系统,依赖的相应jar包会添加到系统,接下来我们写程序运行运行来看看效果。
第二步:JUnit测试验证
我们先来看看单独使用JUnit进行测试的样子,在src/test/java下,建立准备编写测试类的包,然后创建名为JunitTestUser的测试类,代码如下
package test.demo; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.junit.Before; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.context.support.ClassPathXmlApplicationContext; import test.demo.dao.UserDAO; import test.demo.data.User; public class JunitTestUser { private static final Logger logger = LoggerFactory.getLogger(JunitTestUser.class); private UserDAO userDao; @Before public void init() { ClassPathXmlApplicationContext classPathXmlApplicationContext = new ClassPathXmlApplicationContext("classpath*:applicationContext.xml"); SqlSessionFactory sqlSessionFactory = (SqlSessionFactory) classPathXmlApplicationContext.getBean("sqlSessionFactory"); SqlSession sqlSession = sqlSessionFactory.openSession(); userDao = sqlSession.getMapper(UserDAO.class); classPathXmlApplicationContext.close(); } @Test public void testGetUserById() { Integer userId = 1; User user = userDao.getUserById(userId); logger.info("用户的名字是 : " + user.getName()); } }
这里边顺便提一下,这里使用的ClassPathXmlApplicationContext是spring读取xml比较常用的类,也可以直接用ApplicationContext,但共同的作用都是从spring的容器中获取所需的bean,我们这里获取了配置文件中的sqlSessionFactory,然后从这个连接池冲拿到数据库会话(SqlSession),继而我们可以得到所需的dao,通过这个dao我们可以进行对数据库的操作。
这里回顾下我们的applicationContext.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:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p" 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-4.3.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd "> <!-- 加载配置文件 --> <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="location" value="classpath:jdbc.properties" /> </bean> <!-- ========================= ORM BEGIN ========================= --> <!-- 数据源配置 --> <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"> <property name="driverClassName" value="${jdbc.driver}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> <!-- 初始化连接大小 --> <property name="initialSize" value="${jdbc.initialSize}"></property> <!-- 连接池最大数量 --> <property name="maxActive" value="${jdbc.maxActive}"></property> <!-- 连接池最大空闲 --> <property name="maxIdle" value="${jdbc.maxIdle}"></property> <!-- 连接池最小空闲 --> <property name="minIdle" value="${jdbc.minIdle}"></property> <!-- 获取连接最大等待时间 --> <property name="maxWait" value="${jdbc.maxWait}"></property> </bean> <!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件,mapperLocations的设置将会自动扫描MyBatis的xml文件--> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <property name="mapperLocations" value="classpath*:test/demo/mapper/*Mapper.xml"/> </bean> <!-- DAO接口所在包名,Spring会自动寻找其路径下的接口 --> <bean id="demoDaoFactory" class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="test.demo.dao" /> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property> </bean> <!-- 数据事务管理 ( Spring允许允许 MyBatis参与到事务管理中,所以MyBatis没有特定的事务管理器,直接利用了Spring中的 DataSourceTransactionManager) --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean> <!-- ========================= ORM END ========================= --> </beans>
OK,测试部分的代码写完之后,我们直接右键,Run As ,选中Junit Test
然后可以看到Eclipse的Junit栏运行之后会显示出一下的绿色条带
OK,这是成功的运行了代码,测试没问题,然后我们去Console栏,打印的日志里我们可以看到如下代码
16:46:14,725 INFO DruidDataSource:785 - {dataSource-1} inited 16:46:14,900 INFO JunitTestUser:30 - 用户的名字是 : tom
嗯,名字tom已经被打印,好,我们已经完成用JUnit做的单元测试,下边来看看加入SpringTest是什么效果。
第三步:JUnit与SpringTest共同的尝试
紧接着我们创建一个名为SpringTestUser的测试类,代码如下
package test.demo; import javax.annotation.Resource; import org.junit.Test; import org.junit.runner.RunWith; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import test.demo.dao.UserDAO; import test.demo.data.User; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration({"classpath*:applicationContext.xml"}) public class SpringTestUser { private static final Logger logger = LoggerFactory.getLogger(SpringTestUser.class); @Resource private UserDAO userDao; @Test public void testGetUserById() { Integer userId = 1; User user = userDao.getUserById(userId); logger.info("用户的名字是 : " + user.getName()); } }
注意标签@RunWith(SpringJUnit4ClassRunner.class)说的是我们这段代码其实用的还是JUnit进行测试的。@ContextConfiguration({"classpath*:applicationContext.xml"})以标签的形式完成对配置文件的加载,接下来看代码,简直是爽爆了,简洁明了的逻辑,只要配置文件里做好了注入的配置,这里直接通过标签获取即可,OK,我们来运行下:右键,Run As ,选中Junit Test...Junit栏运行显示已经测试成功
我们去Console栏的日志里可以看到如下代码
16:55:57,241 INFO DruidDataSource:785 - {dataSource-1} inited 16:55:57,457 INFO SpringTestUser:26 - 用户的名字是 : tom 16:55:57,459 INFO GenericApplicationContext:987 - Closing org.springframework.context.support.GenericApplicationContext@4667ae56: startup date [Wed Mar 22 16:55:56 CST 2017]; root of context hierarchy 16:55:57,462 INFO DruidDataSource:1514 - {dataSource-1} closed
OK,测试已完成!
第四步:小结
这里不想用太多华丽的词藻来吹嘘使用SpringTest带来的便利,仅仅对比代码的就可以看出,使用SpringTest的优势。实际使用过程中SpringTest集成的对事物的处理啊,对测试数据的回滚啊,仅通过一个标签就可以实现,那可是提供了实实在在的方便,感兴趣的可以试下。
发表评论
-
springBoot+security+mybatis 实现用户权限的数据库动态管理
2018-08-22 21:52 14354一、Spring Security 应用的 ... -
Spring回顾之八 —— Quartz在集群、分布式系统中的应用
2017-05-02 15:52 7692在Quartz的使用中, ... -
Spring回顾之七 —— 和Quartz一起进行定时任务
2017-04-27 16:31 6101Quartz是一个由java ... -
Spring回顾之六 —— JPA,另一种数据方案的尝试
2017-03-29 17:45 2963JPA,即Java持久性API(Java Persis ... -
使用Log4j时,配置ConversionPattern(日志显示格式)遇到的问题
2017-03-21 18:03 3319log4j:ERROR Category option &qu ... -
Spring回顾之四 —— 使用Log4j,添加日志功能
2017-03-21 17:42 13377在上几篇文章我们完成了项目创建,展示了对SpringM ... -
Eclipse:Maven相关Classpath引起的问题
2017-03-21 09:24 5079Classpath entry org.maven.eclip ... -
Eclipse下,Maven打包时忽略src路径下xml文件的问题
2017-03-20 17:57 2093javax.xml.ws.soap.SOAPFaultExce ... -
使用最新版MySQL的jdbc驱动关于时区引发的问题
2017-03-20 17:35 24940Caused by: java.sql.SQLExceptio ... -
Spring回顾之三 —— MyBatis的加盟
2017-03-20 17:03 2670本篇将介绍如何引 ... -
Spring回顾之二 —— 引入SpringMVC
2017-03-16 16:40 2246上篇笔记创建了一个maven的简单web项目,熟悉了下 ... -
Spring回顾之一 —— Maven项目的初建
2017-03-14 16:35 1029工作之余,回头看知识的时候,发现很多东西都有些生疏 ... -
加权随机算法的实现
2016-07-04 21:09 8847加权随机算法,一般用于抽奖,资源调度等场景,话不多说,上代码: ...
相关推荐
单元测试之道Java版——使用Junit,不错的学习测试的教材
SSM中进行单元测试Junit4+spring-test所需jar包,
spring-Test,Junit4 jar,和测试代码
该资源包含了spring整合单元测试Junit开发包spring-test-4.2.4.RELEASE.jar
struts-junit spring-mock spring-test junit等的javadoc.jar格式的API文档,直接导入Eclipse/MyEclipse/Netbeans等IDE即可实现快速API查询。 包含以下文件: File name -------------------------------------- ...
《单元测试之道Java版:使用JUnit》PDF 下载
单元测试之道Java版使用JUnit,是关于java的单元测试的。
用Eclipse进行软件单元测试,具体步骤和示例。
单元测试之道Java版-使用JUnit 中文的,包含源代码
基于Spring的JUnit4单元测试
分别是两个版本的, 因为spring做单元测试的时候, 是很容易出现版本不兼容的情况, 所以我将我用到的jar包分享出来,zip包中内容:hamcrest-core-1.3、junit4.4、junit-4.12、spring_test2.5.5、spring-test-3.2.0....
spring3 + mybatis3 + junit4 可运行项目示例 可进行单元测试,集成测试。。。
Junit单元测试Junit单元测试Junit单元测试Junit单元测试
NULL 博文链接:https://zkf60553.iteye.com/blog/1604723
Junit4 Test 单元测试 Junit4 Test 单元测试 Junit4 Test 单元测试
单元测试—— Spring 环境下测试,所需要的jar包: spring-test-4.3.29.RELEASE.jar、junit-4.13.1.jar、hamcrest-core-1.3.jar。
通过Spring集成单元测试,以后测试service层内容时,就不用getBean()来获得Service层对象了
免费了,spring4+JUnit简单测试,注解组件扫描和xml显示组件扫描,我自己都忘了里面有什么了。
基于Spring的JUnit4单元测试
单元测试框架Junit—— JUnit3.8.1 以及使用JUnit测试的代码demo。