his测试 junit原来不能用的问题解决方法 及 eclipse开发加速小技巧 (from victor)
2012-11-23 08:40
627 查看
大家都知道,eclipse, 有时候速度慢的要死,让我们很抓狂,卡 是它的一个特性! 这也严重影响了我们的开发速度,有时候为了测试一个改进,不得一次、两次、三次…… N次的编译、发布、重启tomcat, 而每次少则一两分钟,多则几分钟, 这中间花费的时间可想而知。
1 先说elipse 优化
插件: 用得时间长了,就会装很多插件,启动关闭eclipse都很慢。 解决方法:preference, 搜Window->Preferences->General-Startup and Shutdown (打勾或去勾) 可以禁掉不用的插件
编译:改用手动编译,千万不用自动编译了,自动编译经常到73% 是个死穴。
解决方法: 工具栏project, 去掉build automatically。 手动编译快捷键:ctrl+B (相对来说,那是相当滴快啊)
另外,如果不怎么改页面html xhtml, 页面校验validation也可以去掉,编译时校验也很费时,preference,搜validatoion, 把相应的勾勾去掉
2 发布 tomcat
tomcat关闭重启也是经常的事,怎么能更省点事呢? server 窗口,双击 打开页面
图1
图2
通过 图1 可以配置工程与tomcat的结合方式; 图2 配置发布方式,选3 可以每次编译(ctrl+b)就 自动发布(选2可以每次改动资源文件就自动发布)。 如果你仅修改了一些非已注入的bean代码,连重启tomcat也免了,否则也需要重启, 但至少把发布这步也给省了。
3 我们的工程下经常会有各种工程,有自己的开发工程,可能还有自己的测试工程,暂时没用的可以close掉,这样在启动 关闭 编译(ctrl+b)时都可以快点
4 最后是解决his下 junit不能用的问题。 之前大家都用过的,后来不能用了。
原来的问题一运行出现的问题是:
这里面给的提示 全是junit spring框架的错误代码,没有一点关于我们的业务代码,确实不太好找到问题所在。
经过一些分析,不是lib包的问题,也不是test代码本身的问题, 最终的原因是mapper加载出现了问题,即:
准确来说是:加载 com.centling.his.persistence.dictionary的问题,再准确一点是加载com.centling.his.persistence.dictionary.base 和 com.centling.his.persistence.dictionary.patient 包 的问题
但我挨个试了下,单独加载里面的每个类,又没问题。 里边代码我不熟,不好说。
解决方案:我们重写一个配置文件testContext.xml ,在测试类时读入。
针对要测试哪个业务方法,只加载需要的mapper和service bean, 没有必要全部加载,虽然需要在配置文件多写几行代码,但在启动时那是快不少滴 ~~~~~
给出两种配置方案:
(-)比如只需要两个service 和几个mapper, 可以这么写
<bean class="com.centling.his.service.BusinessService.ChargeService">
</bean>
<bean class="com.centling.his.service.hospitalcharge.PatientChargeInventoryInHospitalService">
</bean>
<!-- 只加载需要的mapper类 -->
<bean id="chargeMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="com.centling.his.persistence.Business.ChargeMapper" />
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
<bean id="inpBillDetailMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="com.centling.his.persistence.finance.inHospital.InpBillDetailMapper" />
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
<bean id="dictFunctionInfoMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="com.centling.his.persistence.dictionary.sys.DictFunctionInfoMapper" />
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
<bean id="patientInhospRecordMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="com.centling.his.persistence.medical.patient.PatientInhospRecordMapper" />
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
<bean id="dictSectionInfoMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="com.centling.his.persistence.dictionary.staff.DictSectionInfoMapper" />
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
<bean id="patientAdmissionRecordMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="com.centling.his.persistence.medical.patient.PatientAdmissionRecordMapper" />
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
(二)第二种解决方式 配置代码少点,加载的多点
<!-- 需要的用到或测试的 service -->
<bean class="com.centling.his.service.BusinessService.ChargeService">
</bean>
<bean class="com.centling.his.service.hospitalcharge.PatientChargeInventoryInHospitalService">
</bean>
<!--只加载需要的包,看清楚里边没有com.centling.his.persistence.dictionary.base 和 com.centling.his.persistence.dictionary.patient 包 噢 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.centling.his.persistence.Business;
com.centling.his.persistence.finance;
com.centling.his.persistence.medical;
com.centling.his.persistence.dictionary.sys;
com.centling.his.persistence.dictionary.staff;
com.centling.his.persistence.dictionary.patient;
" />
</bean>
另外,希望大家在平常 测试base 和 patient包下的mapper 的过程中,能够逐步找到是哪个mapper的问题,真正解决之~~~~
示例代码已经上传: 配置文件是textContext.xml, 测试类是 根目录test下 com.centling.his.mobile.PatientChargeTest
可以完美运行。
以后,让我们像以前一样尽情的“junit” 吧!!!
希望对大家的开发和测试有一些帮助,提高我们的开发测试速度。。。。。
Best Wises For EveryBody ~~~~~
Hi everyone 不好意思,我之前没理解到家。 谢谢大师的指出,Seven的反馈。谢谢Damon,与他也一起测试了一下————Controller 也是在tomcat启动读入xml时 一并加载了的,如下:
既然如此,在之前说的“比较理想与省时间的开发和测试步骤”中 把Controller代码和页面放在tomcat上启动测试,就行不通了。但
是我们可以做如下调整: 即 Controller的代码也可以像service一样在junit测试上测试好,就可以了。 然后只“启动一
次”tomcat来测试 xhtml页面, 不也是一样的吗?! 当然只“启动一次”只是理想情况,如果你junit测试好了,确实可以尽量减
少Tomcat启动次数,提高开发效率。
另外,在用junit测试的时候,我们经常用打印的方式,但是我感觉有时候用debug更方便,设一个返回的变量,通过Debug我们可以直
接看到里边的值,很方便,比写一串打印语句要方便。
不重启的终极方案:
1 Dynamic code evolution VM 一个允许在运行状态下无限制的修改加载类文件的Java虚拟机补丁
http://ssw.jku.at/dcevm/binaries/
但是我没安装成功,也就没测试成功,我的jdk是1.7,好像说不支持。 1.6的童鞋 感兴趣的可以试一下,期待你们有重大发现!!!
2. Jrebel 一个eclipse的插件
http://zeroturnaround.com/jrebel/jrebel-4-5-released-includes-jrebel-social/
我已经安装测试了,很方便确实无须重启,图下:
修改了controller的代码,编译过后,直接有效果!!!
限制:它是收费的。 机会:可以有两周的免费试用;另外可以给Scala项目和非商业开源项目免费使用一年 ~~~~~~
喜欢尝鲜的brothers and sisters 可以试一下
Good luck!!!!
1 先说elipse 优化
插件: 用得时间长了,就会装很多插件,启动关闭eclipse都很慢。 解决方法:preference, 搜Window->Preferences->General-Startup and Shutdown (打勾或去勾) 可以禁掉不用的插件
编译:改用手动编译,千万不用自动编译了,自动编译经常到73% 是个死穴。
解决方法: 工具栏project, 去掉build automatically。 手动编译快捷键:ctrl+B (相对来说,那是相当滴快啊)
另外,如果不怎么改页面html xhtml, 页面校验validation也可以去掉,编译时校验也很费时,preference,搜validatoion, 把相应的勾勾去掉
2 发布 tomcat
tomcat关闭重启也是经常的事,怎么能更省点事呢? server 窗口,双击 打开页面
图1
图2
通过 图1 可以配置工程与tomcat的结合方式; 图2 配置发布方式,选3 可以每次编译(ctrl+b)就 自动发布(选2可以每次改动资源文件就自动发布)。 如果你仅修改了一些非已注入的bean代码,连重启tomcat也免了,否则也需要重启, 但至少把发布这步也给省了。
3 我们的工程下经常会有各种工程,有自己的开发工程,可能还有自己的测试工程,暂时没用的可以close掉,这样在启动 关闭 编译(ctrl+b)时都可以快点
4 最后是解决his下 junit不能用的问题。 之前大家都用过的,后来不能用了。
原来的问题一运行出现的问题是:
这里面给的提示 全是junit spring框架的错误代码,没有一点关于我们的业务代码,确实不太好找到问题所在。
经过一些分析,不是lib包的问题,也不是test代码本身的问题, 最终的原因是mapper加载出现了问题,即:
准确来说是:加载 com.centling.his.persistence.dictionary的问题,再准确一点是加载com.centling.his.persistence.dictionary.base 和 com.centling.his.persistence.dictionary.patient 包 的问题
但我挨个试了下,单独加载里面的每个类,又没问题。 里边代码我不熟,不好说。
解决方案:我们重写一个配置文件testContext.xml ,在测试类时读入。
针对要测试哪个业务方法,只加载需要的mapper和service bean, 没有必要全部加载,虽然需要在配置文件多写几行代码,但在启动时那是快不少滴 ~~~~~
给出两种配置方案:
(-)比如只需要两个service 和几个mapper, 可以这么写
<bean class="com.centling.his.service.BusinessService.ChargeService">
</bean>
<bean class="com.centling.his.service.hospitalcharge.PatientChargeInventoryInHospitalService">
</bean>
<!-- 只加载需要的mapper类 -->
<bean id="chargeMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="com.centling.his.persistence.Business.ChargeMapper" />
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
<bean id="inpBillDetailMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="com.centling.his.persistence.finance.inHospital.InpBillDetailMapper" />
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
<bean id="dictFunctionInfoMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="com.centling.his.persistence.dictionary.sys.DictFunctionInfoMapper" />
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
<bean id="patientInhospRecordMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="com.centling.his.persistence.medical.patient.PatientInhospRecordMapper" />
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
<bean id="dictSectionInfoMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="com.centling.his.persistence.dictionary.staff.DictSectionInfoMapper" />
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
<bean id="patientAdmissionRecordMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="com.centling.his.persistence.medical.patient.PatientAdmissionRecordMapper" />
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
(二)第二种解决方式 配置代码少点,加载的多点
<!-- 需要的用到或测试的 service -->
<bean class="com.centling.his.service.BusinessService.ChargeService">
</bean>
<bean class="com.centling.his.service.hospitalcharge.PatientChargeInventoryInHospitalService">
</bean>
<!--只加载需要的包,看清楚里边没有com.centling.his.persistence.dictionary.base 和 com.centling.his.persistence.dictionary.patient 包 噢 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.centling.his.persistence.Business;
com.centling.his.persistence.finance;
com.centling.his.persistence.medical;
com.centling.his.persistence.dictionary.sys;
com.centling.his.persistence.dictionary.staff;
com.centling.his.persistence.dictionary.patient;
" />
</bean>
另外,希望大家在平常 测试base 和 patient包下的mapper 的过程中,能够逐步找到是哪个mapper的问题,真正解决之~~~~
示例代码已经上传: 配置文件是textContext.xml, 测试类是 根目录test下 com.centling.his.mobile.PatientChargeTest
可以完美运行。
以后,让我们像以前一样尽情的“junit” 吧!!!
希望对大家的开发和测试有一些帮助,提高我们的开发测试速度。。。。。
Best Wises For EveryBody ~~~~~
Hi everyone 不好意思,我之前没理解到家。 谢谢大师的指出,Seven的反馈。谢谢Damon,与他也一起测试了一下————Controller 也是在tomcat启动读入xml时 一并加载了的,如下:
既然如此,在之前说的“比较理想与省时间的开发和测试步骤”中 把Controller代码和页面放在tomcat上启动测试,就行不通了。但
是我们可以做如下调整: 即 Controller的代码也可以像service一样在junit测试上测试好,就可以了。 然后只“启动一
次”tomcat来测试 xhtml页面, 不也是一样的吗?! 当然只“启动一次”只是理想情况,如果你junit测试好了,确实可以尽量减
少Tomcat启动次数,提高开发效率。
另外,在用junit测试的时候,我们经常用打印的方式,但是我感觉有时候用debug更方便,设一个返回的变量,通过Debug我们可以直
接看到里边的值,很方便,比写一串打印语句要方便。
不重启的终极方案:
1 Dynamic code evolution VM 一个允许在运行状态下无限制的修改加载类文件的Java虚拟机补丁
http://ssw.jku.at/dcevm/binaries/
但是我没安装成功,也就没测试成功,我的jdk是1.7,好像说不支持。 1.6的童鞋 感兴趣的可以试一下,期待你们有重大发现!!!
2. Jrebel 一个eclipse的插件
http://zeroturnaround.com/jrebel/jrebel-4-5-released-includes-jrebel-social/
我已经安装测试了,很方便确实无须重启,图下:
修改了controller的代码,编译过后,直接有效果!!!
限制:它是收费的。 机会:可以有两周的免费试用;另外可以给Scala项目和非商业开源项目免费使用一年 ~~~~~~
喜欢尝鲜的brothers and sisters 可以试一下
Good luck!!!!
相关文章推荐
- 安卓开发环境的搭建和解决在Eclipse新建安卓5.1工程不能自动生成R文件的问题
- Android:在Eclipse下开发android应用产生的问题及解决方法
- 在表示层禁用浏览器缓存的方法,以解决应用开发不能即时刷新体现修改结果的问题
- Spring注解编程时用junit测试时,显示jdK版本过低问题,更改版本后仍然不行的解决方法
- hadoop 在win系统中的eclipse开发测试问题及解决
- 解决Eclipse项目中有sql-map-config.xml文件但是运行Junit测试ibatis时提示找不到该文件的一种方法
- Eclipse中如.js,或.properties文件中有中文不能保存的问题的解决方法
- C#中??和?分别是什么意思? 在ASP.NET开发中一些单词的标准缩写 C#SESSION丢失问题的解决办法 在C#中INTERFACE与ABSTRACT CLASS的区别 SQL命令语句小技巧 JQUERY判断CHECKBOX是否选中三种方法 JS中!=、==、!==、===的用法和区别 在对象比较中,对象相等和对象一致分别指的是什么?
- Windows下用Eclipse开发Hadoop程序遇到的问题及解决方法
- Ubuntu下Eclipse 配置开发C以及小问题,小疑问的解决方法
- [解决]eclipse中JSP页面的内置对象 不能引出方法的问题
- Windows下用Eclipse开发Hadoop程序遇到的问题及解决方法
- Eclipse开发Android应用时遇到的问题以及解决方法
- Eclipse百度地图开发只出现网格的问题解决方法归纳
- Eclipse环境进行Android apk开发问题及解决方法记录(一)
- Eclipse下开发QT4应用,看不见添加的控件的问题及其解决方法
- Eclipse中进行web project开发时遇到httperror 500 错误 jsp support not configured 问题的解决方法
- Eclipse中直接复制粘贴Web项目并运行后,项目名字还是原来名字无法运行的问题解决方法
- eclipse插件开发的发布过程中遇到的问题与解决方法总结
- Android开发由eclipse转Android Studio中一些常见出错问题解决方法