Spring2.5Test测试
上一篇介绍了把ibatis搞到项目中来,现在是时候验证一下代码是否正确的时候了,我们在小项目里采用的是Spring2.5自带的测试框架,为什么?因为他提供了一系列测试的扩展,如测试类只要继承一下AbstractTransactionalJUnit38SpringContextTests类,spring框架的启动和管理都交给测试框架去管理,这个基类还提供了事务管理的功能,在测试中可以对莫个用例进行控制,执行完毕后数据库又回滚到测试执行的状态,从而达到即完成了测试,又保证测试数据即使清理的问题,来看一下我们的执行
1)测试类的存放和命名
目前所有的测试类统一放置在src/test/java中,测试目前处于业务逻辑层,因为业务逻辑层会调用dao层,所以不对dao层做单独测试,测试类的包结构层次和java源文件保持严格一致,如com.taobao.top.coreapp.service.user.impl.UserInfoServiceImpl类的测试代码为com.taobao.top.coreapp.service.user.impl.UserInfoServiceImplTest,测试方法采用test+方法名的方式,如testGetUserInfoById(),对要进行事物控制的测试用例用spring的@Transactional标注注解,这样spring测试框架在执行时会在测试用例开始时开启事物,而在测试用例结束时把当前事物回滚
2)拉出我们Service层的接口方法run一把,验证一下我们前两篇里的配置是否正确--这里我们还没有把dbunit拉如进来,以下的例子还只是验证框架的集成是否Ok
@Transactional
public void testCreateUserInfo() {
UserInfo userInfo = new UserInfo();
userInfo.setName("zhangsan");
userInfo.setPassword("111111");
userInfo.setNick("张三");
try {
userInfoService.createUserInfo(userInfo);
logger.info(userInfo);
Assert.assertTrue(userInfo.getId() > 0);
} catch (CoreAppBizException e) {
Assert.fail("创建用户测试用例失败");
}
}
跑了一把,失败了,后台报错
java.lang.NoSuchMethodError: org/springframework/core/annotation/AnnotationUtils.findAnnotationDeclaringClass(Ljava/lang/Class;Ljava/lang/Class;)Ljava/lang/Class;
at org.springframework.test.context.TestContext.retrieveContextLocations(TestContext.java:143)
at org.springframework.test.context.TestContext.<init>(TestContext.java:108)
at org.springframework.test.context.TestContextManager.<init>(TestContextManager.java:103)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTestContextManager(SpringJUnit4ClassRunner.java:102)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.<init>(SpringJUnit4ClassRunner.java:79)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:67)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:521)
at org.junit.internal.requests.ClassRequest.buildRunner(ClassRequest.java:33)
at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:28)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.<init>(JUnit4TestReference.java:26)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestClassReference.<init>(JUnit4TestClassReference.java:24)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.java:34)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.java:24)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:445)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
找不到方法,这个是为什么呢,这个问题迷惑了我很久,后来找到原因了
大家知道spring的测试框架是spring2.5里的内容,所以当时我把spring里的依赖版本从2.0改成了2.5.4,spring的测试框架版本也是2.5.4,为什么还找不到呢?
通过maven的dependency 视图我搜索了一下spring,结果惊奇的发现还有spring-core2.0,spring-beans2.0这样的依赖,这些依赖从哪里来的?原来是maven自动生成的那个个框架中使用的是spring2.0的版本,虽然我们手动的把spring的版本该改成2.5了,但是这些jar包里的依赖还在,怎么办呢?在pom文件里把这些依赖排除一下就行了
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-spring-plugin</artifactId>
<version>2.0.11.2</version>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-mock</artifactId>
</exclusion>
</exclusions>
</dependency>
果然,排除后问题解决了,单元测试也跑起来了,框架没问题了,兴奋的去数据库去查一下数据,结果又悲剧了,中文乱码了,呵呵,这个也纠结过一阵子,以下是分析过程
a)先前都是在windows下编程,windows下的mysql目录中有个my.ini文件,改一下里面的编码集就行了,Ubuntu上的在哪里呢
google,baidu,都用上了,原来linux系统下是在 /etc/mysql/my.cnf,呵呵,换了个马甲我一样能找到你~
b)修改一下编码集
要改动3处地方,分别找到[client],[mysqld],[mysqldump]在这三个元素的下面分别加一句话default-character-set=utf8保存退出,重启一下mysql服务就ok了,可怜的中文终于存放进去了,遇到类似问题的时候多数是这些个参数没设置导致的,可以用命令行登录系统,通过输入status看一下编码集合是否都改动成utf-8了(默认是litin1),如图,设置后的编码都是UTF8
总结:
maven是个双刃剑,一方面会带来很大的便利性,一部到位,你不用去了解太多的东西,但是这也是他的问题所在,特别是对于间接依赖,不了解他的整个流程,很难去解决问题,问题出来的时候多看看报错信息,尝试从报错信息中找出一些答案,然后验证自己的想法,然后google,乱码的问题也是很经常的问题,对于这种编码经验就是统一编码,从数据库到jsp,到程序源码,jsp,vm,ftl,邮件所有都utf8一般都是不会出问题的,utf8一统天下,呵呵
分享到:
相关推荐
SpringBoot从入门到入魔3天课程(1.56G) 〖课程目录〗: 笔记 ---Jack_《SpringBoot从入门到入魔》笔记.pdf 录播视频 ---Day01SpringBoot基础重温篇.mp4 ---Day02SpringBoot核心原理篇.mp4 ---Day03SpringBoot完美收官...
因为第Spring_2501_Registration_3到Spring_3301_Registration_11需要使用SSh整合的jar包组合,我把这个jar包组合抽出来放到lib目录中了。用的时候需要把这个jar包组合复制到WebRoot\WEB-INF\lib下面。没办法,这里...
专题研究:重温“信贷脉冲”-0217-浙商证券-11页.pdf
重温:Java-Spring-MongoDB Web App with Docker 1.12 使用新的 Docker 1.12 构建、部署、测试和监控多容器、MongoDB 支持的 Java Spring Web 应用程序。 介绍 这篇文章和相关的项目代码已于 2016 年 9 月 3 日更新...
重温:Java-Spring-MongoDB Web App with Docker 1.12 使用新的 Docker 1.12 构建、部署、测试和监控多容器、MongoDB 支持的 Java Spring Web 应用程序。 介绍 这篇文章和相关的项目代码已于 2016 年 9 月 3 日更新...
3. **活动组织**:发起或参与校友聚会、纪念活动等,重温校园情怀,增进彼此友谊。 4. **校友信息查询**:便捷地查找并联系老同学,共同回忆学生时代的美好时光。 5. **论文资源分享**:提供学术资源交流的平台,...
学习心得 感谢以下文章及老师的指导: 【【已完结 共69P】通信原理 主讲:张锦皓-哔哩哔哩】 ...本文不作为一篇严谨的理论推导文章,仅为博主学习时的随手小记,个人的主观认知为主,以求日后能在较快时间内理清思路,...
经典重温C#开发------------------------------------------------------------------------------------------------------------------------------------------------
重温微积分 - 齐民友
重温计算机的发展史-多图展示历史上各种各样的电脑.pdf
然而,有几项工作指出,HJ 测试得到了反直觉的结果,一些研究人员通过模拟研究发现 HJ 测试严重过度拒绝。 在本文中,我们重新调查了 HJ 在 1994 年的创造性工作,发现他们提出的不同时间间隔的概率估计量与其标准...
八年级历史上册 第11课 重温长征路教案 华东师大版-华东师大版初中八年级上册历史教案.doc
齐民优经典微积分教程,打开新世界的大门!!相对于枯燥无味的高数教材,这本书能带来不一样的启发和更为深入地理解
本项目适用于喜欢超级玛丽游戏的人,对于喜欢超级玛丽游戏的人来说,这是一个很好的重温经典的机会;对于学习前端开发的人,这个项目可以作为学习前端开发的实践项目,通过这个项目可以锻炼HTML、CSS和JavaScript等...
NULL 博文链接:https://i8i8i8.iteye.com/blog/445946
在 C#中的委托和事件 一文的后半部分,我向大家讲述了Observer(观察者)模式,并使用委托和事件实现了这个模式。实际上,不使用委托和事件,一样可以实现Observer模式。在本文中,我将使用GOF的经典方式,再次实现一...
重温spring setter注入
陈硕 Google分布式系统专家 课程简介 本课程从网络编程的基本原理入手,基于Linux系统平台...希望系统掌握或重温网络编程相关知识,快速应用于实践的架构师、开发者,以及其他从事网络开发、运维、测试的 IT 从业者。
20190407-国泰君安-通信设备及服务行业:重温传统视频会议的三生三世,揭示云视频行业的十里桃花.pdf