当前位置: 首页 > news >正文

再讨论spring的单元测试

在我以前一篇文章关于spring的文章中仔细讨论过spring单元测试策略,根据最近一些经验。今天再写一点自己的经验:

1.需要把单元测试时不需要的东西拿掉,比如缓存,安全等,这就需要怎么仔细考虑spring的applicationContext.xml功能。

2.DAO与Service的测试需要使用不同的策略,一般来讲,DAO单元测试只测试一个DAO类,而service需要多个DAO来支撑,有时还需要别的service支持。因此需要为DAO与service分别定义两个基类。DAO一般不需要使用事务,因此DAO测试基类继承AbstractDependencyInjectionSpringContextTests;而service需要,Service测试基类继承AbstractTransactionalDataSourceSpringContextTests

3.那怎么简化开发人员编写单元测试类呢?若每次都需要写很多,那他们自然不愿意写,所以架构师应该简化单元测试的编程模型上下功夫。一个原则:每个人只添加自己想要的,必要时可以覆盖全部的配置文件,完全自己来写,下面是我写的两个测试基类的demo


DAO测试基类

  1. publicabstractclassAbstractDAOTestCaseextends
  2. AbstractDependencyInjectionSpringContextTests{
  3. publicAbstractDAOTestCase(){
  4. this.setAutowireMode(AUTOWIRE_BY_NAME);
  5. }
  6. @Override
  7. protectedString[]getConfigLocations(){
  8. String[]baseConfigs=newString[]{"/spring/applicationContext.xml"};
  9. String[]extentConfigs=getExtentConfigs();
  10. intlength=baseConfigs.length+extentConfigs.length;
  11. String[]allConfigs=newString[length];
  12. for(inti=0;i<baseConfigs.length;i++){
  13. allConfigs[i]=baseConfigs[i];
  14. }
  15. for(inti=0;i<extentConfigs.length;i++){
  16. allConfigs[i+baseConfigs.length]=extentConfigs[i];
  17. }
  18. returnallConfigs;
  19. }
  20. //开发人员可以覆盖这个方法,添加自己的配置文件
  21. protectedString[]getExtentConfigs(){
  22. returnnewString[]{};
  23. }
  24. }

Service测试基类

  1. publicabstractclassAbstractServiceTestCaseextends
  2. AbstractTransactionalDataSourceSpringContextTests{
  3. protectedUserDAOuserDAO;
  4. publicAbstractServiceTestCase(){
  5. this.setAutowireMode(AUTOWIRE_BY_NAME);
  6. }
  7. @Override
  8. protectedString[]getConfigLocations(){
  9. String[]baseConfigs=newString[]{"spring/applicationContext.xml",
  10. "spring/applicationContext-transaction.xml",
  11. "org/codehaus/xfire/spring/xfire.xml",
  12. "spring/applicationContext-xfire.xml",
  13. "spring/applicationContext-osworkflow.xml",
  14. "spring/platform/*.xml"};
  15. String[]extentConfigs=getExtentConfigs();
  16. intlength=baseConfigs.length+extentConfigs.length;
  17. String[]allConfigs=newString[length];
  18. for(inti=0;i<baseConfigs.length;i++){
  19. allConfigs[i]=baseConfigs[i];
  20. }
  21. for(inti=0;i<extentConfigs.length;i++){
  22. allConfigs[i+baseConfigs.length]=extentConfigs[i];
  23. }
  24. returnallConfigs;
  25. }
  26. //开发人员可以覆盖这个方法
  27. protectedString[]getExtentConfigs(){
  28. returnnewString[]{};
  29. }
  30. publicvoidsetUserDAO(UserDAOuserDAO){
  31. this.userDAO=userDAO;
  32. }
  33. }

相关文章:

  • 定个小目标
  • 播放抓取的H263 RTP视频
  • 求数组最大最小值的数值方法
  • 鸡笼岗啊鸡笼岗
  • 深度学习三巨头的主要贡献
  • 安装 nnet-ts 报错 no module named TimeSeriesNnet
  • DOS下删除文件和文件夹
  • python 时间序列预测——简单神经网络
  • Java反编译工具――Jode
  • python 时间序列预测——SimpleRNN
  • ADSL拨号断线
  • python 时间序列预测——Jordan循环神经网络
  • 强大的数据报表中心
  • python 时间序列预测——Elman循环神经网络
  • IFormatProvider 接口
  • 深入了解以太坊
  • AngularJS指令开发(1)——参数详解
  • Consul Config 使用Git做版本控制的实现
  • Docker 笔记(2):Dockerfile
  • js作用域和this的理解
  • Linux Process Manage
  • PHP CLI应用的调试原理
  • Python学习之路16-使用API
  • Sequelize 中文文档 v4 - Getting started - 入门
  • vagrant 添加本地 box 安装 laravel homestead
  • 基于axios的vue插件,让http请求更简单
  • 聊聊sentinel的DegradeSlot
  • 目录与文件属性:编写ls
  • 排序算法学习笔记
  • 使用阿里云发布分布式网站,开发时候应该注意什么?
  • ​2021半年盘点,不想你错过的重磅新书
  • #我与Java虚拟机的故事#连载15:完整阅读的第一本技术书籍
  • $GOPATH/go.mod exists but should not goland
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • $NOIp2018$劝退记
  • $refs 、$nextTic、动态组件、name的使用
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (Java岗)秋招打卡!一本学历拿下美团、阿里、快手、米哈游offer
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (vue)el-checkbox 实现展示区分 label 和 value(展示值与选中获取值需不同)
  • (草履虫都可以看懂的)PyQt子窗口向主窗口传递参数,主窗口接收子窗口信号、参数。
  • (第一天)包装对象、作用域、创建对象
  • (附源码)spring boot建达集团公司平台 毕业设计 141538
  • (附源码)springboot太原学院贫困生申请管理系统 毕业设计 101517
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
  • (十一)c52学习之旅-动态数码管
  • (心得)获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列。
  • (一)80c52学习之旅-起始篇
  • (一)RocketMQ初步认识
  • (译)计算距离、方位和更多经纬度之间的点
  • (转)为C# Windows服务添加安装程序
  • (转载)跟我一起学习VIM - The Life Changing Editor
  • *Django中的Ajax 纯js的书写样式1
  • .describe() python_Python-Win32com-Excel
  • .NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划