CN105389256B - 一种单元测试方法及系统 - Google Patents
一种单元测试方法及系统 Download PDFInfo
- Publication number
- CN105389256B CN105389256B CN201510767038.6A CN201510767038A CN105389256B CN 105389256 B CN105389256 B CN 105389256B CN 201510767038 A CN201510767038 A CN 201510767038A CN 105389256 B CN105389256 B CN 105389256B
- Authority
- CN
- China
- Prior art keywords
- unit
- test
- target detection
- detection unit
- frame
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3664—Environments for testing or debugging software
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3692—Test management for test results analysis
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种单元测试方法及系统,所述方法包括:根据预设的测试需求数据,设置单元测试框架,所述单元测试框架独立于软件项目;利用所述单元测试框架,构建测试运行环境;基于所述测试运行环境,对目标测试单元进行测试,以得到所述目标测试单元的测试结果。本发明通过设置独立于软件项目的单元测试框架来构建测试运行环境,进而再基于该测试运行环境对目标测试单元进行测试,最终得到测试结果,无需启动整个软件项目的服务来构建测试运行环境,减少测试运行时间,提高测试效率。
Description
技术领域
本发明涉及软件测试技术领域,特别涉及一种单元测试方法及系统。
背景技术
目前,在软件项目的测试阶段中,很多测试问题都是在应用组装环节才能发现,测试问题暴露的越晚,项目测试的反复次数越多,周期也越长,效率越低,因此,需要对软件项目中最小可测试单元进行检验和验证,以尽快暴露各种测试问题。
现有技术中的单元测试方案中,通常是需要启动整个软件项目来构建服务运行环境,由此造成测试运行的时间较长,测试效率较低。
发明内容
有鉴于此,本发明的目的在于,提供一种单元测试方法及系统,用以解决现有技术中测试运行时间较长,效率较低的技术问题。
本发明还提供了一种单元测试方法,包括:
根据预设的测试需求数据,设置单元测试框架,所述单元测试框架独立于软件项目;
利用所述单元测试框架,构建测试运行环境;
基于所述测试运行环境,对目标测试单元进行测试,以得到所述目标测试单元的测试结果。
上述方法,优选的,所述利用所述单元测试框架,构建测试运行环境,包括:
建立Spring应用平台;
利用所述单元测试框架中的上下文管理组件,初始化所述Spring应用平台;
在所述Spring应用平台上加载所述单元测试框架的配置文件和功能组件,以建立以Spring应用平台为基础的测试运行环境;
其中,所述功能组件至少包括:规范校验组件、格式化报告组件、注解声明组件。
上述方法,优选的,所述基于所述测试运行环境,对目标测试单元进行测试,以得到所述目标测试单元的测试结果,包括:
在所述测试运行环境中,启动所述单元测试框架中的测试类,以启动对所述目标测试单元的测试方法对目标测试单元进行测试,得到所述目标测试单元的测试结果。
上述方法,优选的,所述方法还包括:
响应于对所述目标测试单元的测试过程中所产生的报文数据请求,调用所述单元测试框架中的挡板获取与所述报文数据请求对应的报文数据;
或
响应于对所述目标测试单元的测试过程中所产生的预埋数据请求,调用相应的sql语句获取预埋数据。
上述方法,优选的,在同一挡板被多次调用时,所述方法还包括:
利用所述单元测试框架中的mock构建队列,所述队列用于存放利用同一挡板被多次调用所获取到的报文数据。
本发明还提供了一种单元测试系统,包括:
框架设置单元,用于根据预设的测试需求数据,设置单元测试框架,所述单元测试框架独立于软件项目;
环境构建单元,用于利用所述单元测试框架,构建测试运行环境;
目标测试单元,用于基于所述测试运行环境,对目标测试单元进行测试,以得到所述目标测试单元的测试结果。
上述系统,优选的,所述环境构建单元包括:
平台建立子单元,用于建立Spring应用平台;
平台初始化子单元,用于利用所述单元测试框架中的上下文管理组件,初始化所述Spring应用平台;
环境建立子单元,用于在所述Spring应用平台上加载所述单元测试框架的配置文件和功能组件,以建立以Spring应用平台为基础的测试运行环境;
其中,所述功能组件至少包括:规范校验组件、格式化报告组件、注解声明组件。
上述系统,优选的,所述目标测试单元包括:
测试方法启动子单元,用于在所述测试运行环境中,启动所述单元测试框架中的测试类,以启动对所述目标测试单元的测试方法对所述目标测试单元进行测试,得到所述目标测试单元的测试结果。
上述系统,优选的,所述系统还包括:
挡板调用单元,用于响应于对所述目标测试单元的测试过程中所产生的报文数据请求,调用所述单元测试框架中的挡板获取与所述报文数据请求相对应的报文数据;
预埋获取单元,用于响应于对所述目标测试单元的测试过程中所产生的预埋数据请求,调用相应的sql语句获取预埋数据。
上述系统,优选的,所述系统还包括:
队列构建单元,用于在同一挡板被多次调用时,利用所述单元测试框架中的mock构建队列,所述队列用于存放利用同一挡板被多次调用所获取到的报文数据。
由上述方案可知,本发明所提供的一种单元测试方法及系统,通过设置独立于软件项目的单元测试框架来构建测试运行环境,进而再基于该测试运行环境对目标测试单元进行测试,最终得到测试结果,无需启动整个软件项目的服务来构建测试运行环境,减少测试运行时间,提高测试效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本发明实施例一提供的一种单元测试方法的流程图;
图2a及图2b分别为本发明实施例的应用示例图;
图3为本发明实施例二提供的一种单元测试方法的部分流程图;
图4为本发明实施例三提供的一种单元测试方法的流程图;
图5a为本发明实施例的另一流程图;
图5b为本发明实施例的又一流程图;
图6为本发明实施例的另一流程图;
图7为本发明实施例四提供的一种单元测试系统的结构示意图;
图8为本发明实施例五提供的一种单元测试系统的部分结构示意图;
图9为本发明实施例六提供的一种单元测试系统的结构示意图;
图10为本发明实施例的另一结构示意图;
图11为本发明实施例的又一结构示意图;
图12为本发明实施例的另一结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
参考图1,为本发明实施例一提供的一种单元测试方法的流程图,其中,所述方法适用于对软件项目的最小可测试单元的单元测试中,具体的,本实施例中可以通过以下步骤实现:
步骤101:根据预设的测试需求数据,设置单元测试框架。
其中,所述单元测试框架独立于软件项目,所述测试需求数据可以根据开发人员及测试人员的测试需求及所述软件项目的功能需求等生产,表征对所述软件项目对应的可测试单元的测试需求。
以某银行的应用系统软件项目为例,所述单元测试框架依赖于新一代Java技术框架openframework、软件项目的产品平台P8及产品框架app-core,可以采用JUnit和Spring作为技术雏形,如图2a中所示,为本实施例中单元测试框架的应用平台结构图:应用服务层、应用架构层、资源依赖层、集成环境层。在这个基础上为该银行应用系统提供一个完整的单元测试解决方案,用以实现针对测试对象进行效率分析、对运行时长和SQL语句的调用次数及覆盖率进行统计及以多种方式输出测试结果报告等功能。
步骤102:利用所述单元测试框架,构建测试运行环境。
其中,所述单元测试框架独立于所述软件项目,因此,所述测试运行环境的构建无需启动整个所述软件项目的项目服务,而是利用所述单元测试框架来构建测试运行环境,用以模拟对测试单元进行测试的测试环境。
步骤103:基于所述测试运行环境,对目标测试单元进行测试,以得到所述目标测试单元的测试结果。
其中,所述目标测试单元即为测试人员或开发人员所编写的测试用例,具体的,本实施例中将所述目标测试单元加载到所述测试运行环境中,进而开始对所述目标测试单元执行测试流程,进而得到所述目标测试单元的测试结果。
由上述方案可知,本发明实施例一所提供的一种单元测试方法,通过设置独立于软件项目的单元测试框架来构建测试运行环境,进而再基于该测试运行环境对目标测试单元进行测试,最终得到测试结果,无需启动整个软件项目的服务来构建测试运行环境,减少测试运行时间,提高测试效率。
参考图3,为本发明实施例二提供的一种单元测试方法中所述步骤102的实现流程图,其中,所述步骤102可以通过以下步骤实现:
步骤121:建立Spring应用平台。
其中,所述Spring应用平台可以理解为Spring容器。
步骤122:利用所述单元测试框架中的上下文管理组件,初始化所述Spring应用平台。
其中,所述上下文管理组件是所述单元测试框架中设置的一个核心组件,用于建立Spring容器环境,并建立被测试的目标测试单元的方法栈上下文。具体的,本实施例中利用所述上下文管理组件来初始化所述Spring应用平台的基本配置,包括:Spring的基本类及配置文件,进而提供Spring资源获取的统一接口、统一环境的测试数据模拟、统一的测试结果输出接口等。这里的资源在单元测试完成之后会被释放。
步骤123:在所述Spring应用平台上加载所述单元测试框架的配置文件和功能组件,以建立以Spring应用平台为基础的测试运行环境。
其中,所述功能组件至少包括:规范校验组件、格式化报告组件、注解声明组件等等。其中,所述规范校验组件(aspect包)用于对不同类型的目标测试单元提供相应的分析校验规则,在具体实现中,所述规范校验组件主要是针对一个统一接口IAppAspect在不同层面的实现,以基于CCB Framework的CMS工程为例,DB、Dao、SC、TC各层对应一个XXXAspect实现类,针对每种不同的被测对象(目标测试单元)提供不同的分析校验规则。其中,IAppAspect接口主要提供三个待实现的方法,分别是beforeMethodProceed()、afterMethodProceed()、afterMethodThrowing()分别代表单元测试方法执行前、单元测试方法执行后、单元测试方法异常后。这个三个方法是有单元测试框架完成和执行的,用于方法的前后处理、异常的后处理,统计相关信息。
而所述格式化报告组件(report包)用于将所述测试结果进行格式化输出的组件,例如,本实施例利用apache的poi项目操作excel表单,按照预先设置好的模板格式将统计到的方法调用过程/方法栈进行打印,同时输出方法所属的类和包名,以及方法执行所需的时间。所述格式化报告组件的主要逻辑是在SpringBeanServiceTests集成测试类执行结束时调用tearDownAfterClass接口的时候,植入相应的代码来实现Excel报表的生成。具体逻辑为:首先,从上下文管理组件的上下文环境中读出所有根节点的信息,调用getAllRootNodes()方法,将取出的信息放入Map中;再通过报表工厂ReportFactory的buildReport()方法将节点信息交给报表节点MReport进行进一步处理,MReport会将根节点信息处理好交给MTestCase类进行解析,MTestCase会递归调用parseDetail方法,对根节点以下所有子节点递归处理统计信息,保存在一个列表中;最后,通过父类ReportPrinter的print方法会调用子类ExcelReportPrinter的writeToFile把报表信息写入到Excel文件中。
另外,所述注解声明组件(annotation包)用于声明支持本实施例中所述单元测试框架所需要的功能型注解,如InnerComService用于声明挡板;等等。
具体的,如图2b中所示,本实施例中首先需要加载Spring的配置文件:SpringBeanServiceTests拥有SpringContext4Tests的静态对象,会预先调用SpringContext4Tests的getSpringContext()的静态方法,通过单件模式取得Spring的上下文环境ClassPathXmlApplicationContext并加载三个配置文件appframework-test.xml,spring-core.xml,persist.xml。其中spring-core.xml和persist.xml是应用所需的配置文件;appframework-test.xml则是所述单元测试框架的配置文件。
在本实施例的具体实现中,上述配置文件中的SpringBeanServiceTests会继承AbstractTransactionalJUnit4SpringContextTests类,从而添加Spring和JUnit4的基本功能,能够依托于JUnit4的插件启动对目标测试单元的测试。而SpringBeanServiceTests类提供了Before、After、BeforeClass、AfterClass的JUnit注解,在AfterClass里释放spring资源。另外,将Test标记提供给子类实现。由子类标记需要测试的方法。
另外,本实施例中通过Spring的AOP特性,当测试方法调用getBean从spring容器中取得相应的bean对象时,由SpringAOP的拦截器根据设定的正则表达式规则进行匹配,对匹配的方法进行拦截。本实施例中分别设定before、after、after-throwing三种情况下的执行方法。同时在所述规范校验组件aspect的包中,定义相应的方法执行类,比如BaseDaoAspect、BaseDBServiceAspect,分别加载相应的方法前处理、方法后处理、异常后处理操作。前处理对方法开始时间进行统计,后处理对方法结束时间进行统计。当方法执行完毕时,测试对象可调用父类的printNode和printCallerStackInfo方法使用CallerStackContext静态类对某个节点或构建好的方法栈及相应的统计信息进行打印。
需要说明的是,本实施例所构建的测试运行环境中,还提供了辅助功能。例如,getBeanProperties可以将任意的Bean对象的所有公共属性,也就是有get方法的属性值进行打印。
在具体实现中,本实施例中的所述单元测试框架不仅提供数据库相关的所有测试用例的基础类DBTests,用以支持各类数据库相关操作的单元测试,加载的组件最少,还提供基于Spring bean相关的所有测试用例的基础类BeanTests,用以支持对框架容器内注册bean进行的测试,可以不用报文解析,直接使用方法调用的形式完成测试,加载的组件比DBTests多,同时还提供基于报文相关的所有测试用例的基础类ServiceTests,用以支持报文方式的单元测试,可以直接截取生产或测试环境的报文发起单元测试,加载的组件最多。由此,参考图4,为本发明实施例三提供的一种单元测试方法的流程图,其中,所述步骤103可以通过以下步骤实现:
步骤131:在所述测试运行环境中,启动所述单元测试框架中的测试类,以启动对所述目标测试单元的测试方法对目标测试单元进行测试,得到所述目标测试单元的测试结果。
也就是说,本实施例中通过启动所述单元测试框架中的测试类,进而启动能够对所述目标测试单元的测试方法,由该测试方法对所述目标测试单元进行测试,得到所述目标测试单元的测试结果。
其中,在对所述目标测试单元进行测试的过程中可能会产生各种数据请求,此时需要获取相应的数据返回给测试方法,使得对所述目标测试单元的测试流程正常进行,最终得到测试结果。这里的数据请求可以为报文数据请求、预埋数据请求等。
具体的,参考图5a,为本发明实施例的另一流程图,其中,所述方法还可以包括以下步骤:
步骤104:响应于对所述目标测试单元的测试过程中所产生的报文数据请求,调用所述单元测试框架中的挡板获取与所述报文数据请求对应的报文数据。
也就是说,本实施例中所设置的单元测试框架具备基于对象和报文的内呼和外呼挡板功能,进而使得该单元测试框架能够通过预先设置的挡板来获取相应的对象或报文数据。具体的,在所述目标测试单元(测试用例)的编写过程中,开发者可预先声明对代码执行过程中,需要对外呼和内呼类的哪些方法或服务设置挡板,以使得测试执行时服务从挡板中返回测试需用数据,保证案例正确执行,完成完整的测试。通过@InnerComService注解在测试类中声明一个挡板,注解需要修饰一个java方法,方法参数需要和被挡板替换的方法保持一致,传入的参数用于加工返回数据。同时,通过注解参数类名className,方法名methodName,类型type,联机交易码serviceId准确的定位这个被拦截方法。
例如,挡板1拦截被呼交易A058111N1请求,三个参数为内呼公共参数,可用于加工返回数据。当内呼请求发出时,所述单元测试框架会捕获报文数据请求并由此挡板加工好的返回对象传递给调用方;挡板2拦截被呼交易员SA0100900请求,className用于指定外呼类OutBoundAccountiServiceImpl,methodName参数用于指定方法名queryAcctInfoDetail,入参为SA0100900InVo。同理,外呼会加工SA0100900OutVo给调用方。所述单元测试框架还提供读取指定报文的方式生成返回对象,需要借助框架的报文解析功能,这种方式可测试外呼报文的配置是否正确。
而存在有测试用例即目标测试单元对同一挡板进行多次调用的情况,由于上述基于对象和报文的挡板每次提供的挡板数据是一样的,而在需要返回不同数据时无法实施,因此,参考图5b,为本发明实施例的又一流程图,其中,所述方法还可以包括以下步骤:
步骤105:利用所述单元测试框架中的mock构建队列,所述队列用于存放利用同一挡板被多次调用所获取到的报文数据。
也就是说,在本实施例中,通过预先设置好mock队列,进而存放同一挡板被多次调用时每次调用所获取到的报文数据(对象),由此,在对所述目标测试单元的测试过程中,若多次调用同一挡板,其返回的数据也是不同的,保证测试的顺利准确的进行。
另外,参考图6,为本发明实施例的另一流程图,其中,所述方法还可以包括以下步骤:
步骤106:响应于对所述目标测试单元的测试过程中所产生的预埋数据请求,调用相应的sql语句获取预埋数据。
也就是说,本实施例中可以在每个单元测试用例或者子用例执行前通过loadAndRunSqlScript(String fileName)的方式加载预埋数据脚本,或loadAndRunSqlString(String sqlString)的方法来直接调用sql语句,准备测试数据,保证单元测试案例可回归和重复执行。
参考图7,为本发明实施例四提供的一种单元测试系统的结构示意图,其中,所述系统适用于对软件项目的最小可测试单元的单元测试中,具体的,本实施例中的系统可以包括以下结构:
框架设置单元701,用于根据预设的测试需求数据,设置单元测试框架。
其中,所述单元测试框架独立于软件项目,所述测试需求数据可以根据开发人员及测试人员的测试需求及所述软件项目的功能需求等生产,表征对所述软件项目对应的可测试单元的测试需求。
以某银行的应用系统软件项目为例,所述单元测试框架依赖于新一代Java技术框架openframework、软件项目的产品平台P8及产品框架app-core,可以采用JUnit和Spring作为技术雏形,如图2a中所示,为本实施例中单元测试框架的应用平台结构图,在这个基础上为该银行应用系统提供一个完整的单元测试解决方案,用以实现针对测试对象进行效率分析、对运行时长和SQL语句的调用次数及覆盖率进行统计及以多种方式输出测试结果报告等功能。
环境构建单元702,用于利用所述单元测试框架,构建测试运行环境。
其中,所述单元测试框架独立于所述软件项目,因此,所述测试运行环境的构建无需启动整个所述软件项目的项目服务,而是利用所述单元测试框架来构建测试运行环境,用以模拟对测试单元进行测试的测试环境。
目标测试单元703,用于基于所述测试运行环境,对目标测试单元进行测试,以得到所述目标测试单元的测试结果。
其中,所述目标测试单元即为测试人员或开发人员所编写的测试用例,具体的,本实施例中将所述目标测试单元加载到所述测试运行环境中,进而开始对所述目标测试单元执行测试流程,进而得到所述目标测试单元的测试结果。
由上述方案可知,本发明实施例四所提供的一种单元测试系统,通过设置独立于软件项目的单元测试框架来构建测试运行环境,进而再基于该测试运行环境对目标测试单元进行测试,最终得到测试结果,无需启动整个软件项目的服务来构建测试运行环境,减少测试运行时间,提高测试效率。
参考图8,为本发明实施例五提供的一种单元测试系统中所述环境构建单元702的结构示意图,其中,所述环境构建单元702可以包括以下结构:
平台建立子单元721,用于建立Spring应用平台。
其中,所述Spring应用平台可以理解为Spring容器。
平台初始化子单元722,用于利用所述单元测试框架中的上下文管理组件,初始化所述Spring应用平台。
其中,所述上下文管理组件是所述单元测试框架中设置的一个核心组件,用于建立Spring容器环境,并建立被测试的目标测试单元的方法栈上下文。具体的,本实施例中利用所述上下文管理组件来初始化所述Spring应用平台的基本配置,包括:Spring的基本类及配置文件,进而提供Spring资源获取的统一接口、统一环境的测试数据模拟、统一的测试结果输出接口等。这里的资源在单元测试完成之后会被释放。
环境建立子单元723,用于在所述Spring应用平台上加载所述单元测试框架的配置文件和功能组件,以建立以Spring应用平台为基础的测试运行环境。
其中,所述功能组件至少包括:规范校验组件、格式化报告组件、注解声明组件。其中,所述规范校验组件(aspect包)用于对不同类型的目标测试单元提供相应的分析校验规则,在具体实现中,所述规范校验组件主要是针对一个统一接口IAppAspect在不同层面的实现,以基于CCB Framework的CMS工程为例,DB、Dao、SC、TC各层对应一个XXXAspect实现类,针对每种不同的被测对象(目标测试单元)提供不同的分析校验规则。其中,IAppAspect接口主要提供三个待实现的方法,分别是beforeMethodProceed()、afterMethodProceed()、afterMethodThrowing()分别代表单元测试方法执行前、单元测试方法执行后、单元测试方法异常后。这个三个方法是有单元测试框架完成和执行的,用于方法的前后处理、异常的后处理,统计相关信息。
而所述格式化报告组件(report包)用于将所述测试结果进行格式化输出的组件,例如,本实施例利用apache的poi项目操作excel表单,按照预先设置好的模板格式将统计到的方法调用过程/方法栈进行打印,同时输出方法所属的类和包名,以及方法执行所需的时间。所述格式化报告组件的主要逻辑是在SpringBeanServiceTests集成测试类执行结束时调用tearDownAfterClass接口的时候,植入相应的代码来实现Excel报表的生成。具体逻辑为:首先,从上下文管理组件的上下文环境中读出所有根节点的信息,调用getAllRootNodes()方法,将取出的信息放入Map中;再通过报表工厂ReportFactory的buildReport()方法将节点信息交给报表节点MReport进行进一步处理,MReport会将根节点信息处理好交给MTestCase类进行解析,MTestCase会递归调用parseDetail方法,对根节点以下所有子节点递归处理统计信息,保存在一个列表中;最后,通过父类ReportPrinter的print方法会调用子类ExcelReportPrinter的writeToFile把报表信息写入到Excel文件中。
另外,所述注解声明组件(annotation包)用于声明支持本实施例中所述单元测试框架所需要的功能型注解,如InnerComService用于声明挡板;等等。
具体的,如图2b中所示,本实施例中首先需要加载Spring的配置文件:SpringBeanServiceTests拥有SpringContext4Tests的静态对象,会预先调用SpringContext4Tests的getSpringContext()的静态方法,通过单件模式取得Spring的上下文环境ClassPathXmlApplicationContext并加载三个配置文件appframework-test.xml,spring-core.xml,persist.xml。其中spring-core.xml和persist.xml是应用所需的配置文件;appframework-test.xml则是所述单元测试框架的配置文件。
在本实施例的具体实现中,上述配置文件中的SpringBeanServiceTests会继承AbstractTransactionalJUnit4SpringContextTests类,从而添加Spring和JUnit4的基本功能,能够依托于JUnit4的插件启动对目标测试单元的测试。而SpringBeanServiceTests类提供了Before、After、BeforeClass、AfterClass的JUnit注解,在AfterClass里释放spring资源。另外,将Test标记提供给子类实现。由子类标记需要测试的方法。
另外,本实施例中通过Spring的AOP特性,当测试方法调用getBean从spring容器中取得相应的bean对象时,由SpringAOP的拦截器根据设定的正则表达式规则进行匹配,对匹配的方法进行拦截。本实施例中分别设定before、after、after-throwing三种情况下的执行方法。同时在所述规范校验组件aspect的包中,定义相应的方法执行类,比如BaseDaoAspect、BaseDBServiceAspect,分别加载相应的方法前处理、方法后处理、异常后处理操作。前处理对方法开始时间进行统计,后处理对方法结束时间进行统计。当方法执行完毕时,测试对象可调用父类的printNode和printCallerStackInfo方法使用CallerStackContext静态类对某个节点或构建好的方法栈及相应的统计信息进行打印。
需要说明的是,本实施例所构建的测试运行环境中,还提供了辅助功能。例如,getBeanProperties可以将任意的Bean对象的所有公共属性,也就是有get方法的属性值进行打印。
在具体实现中,本实施例中的所述单元测试框架不仅提供数据库相关的所有测试用例的基础类DBTests,用以支持各类数据库相关操作的单元测试,加载的组件最少,还提供基于Spring bean相关的所有测试用例的基础类BeanTests,用以支持对框架容器内注册bean进行的测试,可以不用报文解析,直接使用方法调用的形式完成测试,加载的组件比DBTests多,同时还提供基于报文相关的所有测试用例的基础类ServiceTests,用以支持报文方式的单元测试,可以直接截取生产或测试环境的报文发起单元测试,加载的组件最多。由此,参考图9,为本发明实施例六提供的一种单元测试系统的结构示意图,其中,所述目标测试单元703可以通过以下结构实现:
测试方法启动子单元731,用于在所述测试运行环境中,启动所述单元测试框架中的测试类,以启动对所述目标测试单元的测试方法对所述目标测试单元进行测试,得到所述目标测试单元的测试结果。
也就是说,本实施例中通过启动所述单元测试框架中的测试类,进而启动能够对所述目标测试单元的测试方法,由该测试方法对所述目标测试单元进行测试,得到所述目标测试单元的测试结果。
其中,在对所述目标测试单元进行测试的过程中可能会产生各种数据请求,此时需要获取相应的数据返回给测试方法,使得对所述目标测试单元的测试流程正常进行,最终得到测试结果。这里的数据请求可以为报文数据请求、预埋数据请求等。
具体的,参考图10,为本发明实施例的另一结构示意图,其中,所述系统还包括:
挡板调用单元704,用于响应于对所述目标测试单元的测试过程中所产生的报文数据请求,调用所述单元测试框架中的挡板获取与所述报文数据请求相对应的报文数据。
也就是说,本实施例中所设置的单元测试框架具备基于对象和报文的内呼和外呼挡板功能,进而使得该单元测试框架能够通过预先设置的挡板来获取相应的对象或报文数据。具体的,在所述目标测试单元(测试用例)的编写过程中,开发者可预先声明对代码执行过程中,需要对外呼和内呼类的哪些方法或服务设置挡板,以使得测试执行时服务从挡板中返回测试需用数据,保证案例正确执行,完成完整的测试。通过@InnerComService注解在测试类中声明一个挡板,注解需要修饰一个java方法,方法参数需要和被挡板替换的方法保持一致,传入的参数用于加工返回数据。同时,通过注解参数类名className,方法名methodName,类型type,联机交易码serviceId准确的定位这个被拦截方法。
例如,挡板1拦截被呼交易A058111N1请求,三个参数为内呼公共参数,可用于加工返回数据。当内呼请求发出时,所述单元测试框架会捕获报文数据请求并由此挡板加工好的返回对象传递给调用方;挡板2拦截被呼交易员SA0100900请求,className用于指定外呼类OutBoundAccountiServiceImpl,methodName参数用于指定方法名queryAcctInfoDetail,入参为SA0100900InVo。同理,外呼会加工SA0100900OutVo给调用方。所述单元测试框架还提供读取指定报文的方式生成返回对象,需要借助框架的报文解析功能,这种方式可测试外呼报文的配置是否正确。
而存在有测试用例即目标测试单元对同一挡板进行多次调用的情况,由于上述基于对象和报文的挡板每次提供的挡板数据是一样的,而在需要返回不同数据时无法实施,因此,参考图11,为本发明实施例的又一结构示意图,其中,所述系统还可以包括以下结构:
队列构建单元705,用于在同一挡板被多次调用时,利用所述单元测试框架中的mock构建队列,所述队列用于存放利用同一挡板被多次调用所获取到的报文数据。
也就是说,在本实施例中,通过预先设置好mock队列,进而存放同一挡板被多次调用时每次调用所获取到的报文数据(对象),由此,在对所述目标测试单元的测试过程中,若多次调用同一挡板,其返回的数据也是不同的,保证测试的顺利准确的进行。
另外,参考图12,为本发明实施例的另一结构示意图,其中,所述系统还可以包括以下结构:
预埋获取单元706,用于响应于对所述目标测试单元的测试过程中所产生的预埋数据请求,调用相应的sql语句获取预埋数据。
也就是说,本实施例中可以在每个单元测试用例或者子用例执行前通过loadAndRunSqlScript(String fileName)的方式加载预埋数据脚本,或loadAndRunSqlString(String sqlString)的方法来直接调用sql语句,准备测试数据,保证单元测试案例可回归和重复执行。
本实施例方法所述的功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算设备可读取存储介质中。基于这样的理解,本申请实施例对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该软件产品存储在一个存储介质中,包括若干指令用以使得一台计算设备(可以是个人计算机,服务器,移动计算设备或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本申请。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (8)
1.一种单元测试方法,其特征在于,包括:
根据预设的测试需求数据,设置单元测试框架,所述单元测试框架独立于软件项目;
利用所述单元测试框架,构建测试运行环境;
基于所述测试运行环境,对目标测试单元进行测试,以得到所述目标测试单元的测试结果;
所述利用所述单元测试框架,构建测试运行环境,包括:
建立Spring应用平台;
利用所述单元测试框架中的上下文管理组件,初始化所述Spring应用平台;
在所述Spring应用平台上加载所述单元测试框架的配置文件和功能组件,以建立以Spring应用平台为基础的测试运行环境;
其中,所述功能组件至少包括:规范校验组件、格式化报告组件、注解声明组件;
所述上下文管理组件是所述单元测试框架中设置的一个核心组件,用于建立Spring容器环境,并建立被测试的目标测试单元的方法栈上下文;
所述规范校验组件用于对不同类型的目标测试单元提供相应的分析校验规则;
所述格式化报告组件用于将所述测试结果进行格式化输出的组件;
所述注解声明组件用于声明支持本实施例中所述单元测试框架所需要的功能型注解。
2.根据权利要求1所述的方法,其特征在于,所述基于所述测试运行环境,对目标测试单元进行测试,以得到所述目标测试单元的测试结果,包括:
在所述测试运行环境中,启动所述单元测试框架中的测试类,以启动对所述目标测试单元的测试方法对目标测试单元进行测试,得到所述目标测试单元的测试结果。
3.根据权利要求2所述的方法,其特征在于,所述方法还包括:
响应于对所述目标测试单元的测试过程中所产生的报文数据请求,调用所述单元测试框架中的挡板获取与所述报文数据请求对应的报文数据;
或
响应于对所述目标测试单元的测试过程中所产生的预埋数据请求,调用相应的sql语句获取预埋数据。
4.根据权利要求3所述的方法,其特征在于,在同一挡板被多次调用时,所述方法还包括:
利用所述单元测试框架中的mock构建队列,所述队列用于存放利用同一挡板被多次调用所获取到的报文数据。
5.一种单元测试系统,其特征在于,包括:
框架设置单元,用于根据预设的测试需求数据,设置单元测试框架,所述单元测试框架独立于软件项目;
环境构建单元,用于利用所述单元测试框架,构建测试运行环境;
目标测试单元,用于基于所述测试运行环境,对目标测试单元进行测试,以得到所述目标测试单元的测试结果;
所述环境构建单元包括:
平台建立子单元,用于建立Spring应用平台;
平台初始化子单元,用于利用所述单元测试框架中的上下文管理组件,初始化所述Spring应用平台;
环境建立子单元,用于在所述Spring应用平台上加载所述单元测试框架的配置文件和功能组件,以建立以Spring应用平台为基础的测试运行环境;
其中,所述功能组件至少包括:规范校验组件、格式化报告组件、注解声明组件;
所述上下文管理组件是所述单元测试框架中设置的一个核心组件,用于建立Spring容器环境,并建立被测试的目标测试单元的方法栈上下文;
所述规范校验组件用于对不同类型的目标测试单元提供相应的分析校验规则;
所述格式化报告组件用于将所述测试结果进行格式化输出的组件;
所述注解声明组件用于声明支持本实施例中所述单元测试框架所需要的功能型注解。
6.根据权利要求5所述的系统,其特征在于,所述目标测试单元包括:
测试方法启动子单元,用于在所述测试运行环境中,启动所述单元测试框架中的测试类,以启动对所述目标测试单元的测试方法对所述目标测试单元进行测试,得到所述目标测试单元的测试结果。
7.根据权利要求6所述的系统,其特征在于,所述系统还包括:
挡板调用单元,用于响应于对所述目标测试单元的测试过程中所产生的报文数据请求,调用所述单元测试框架中的挡板获取与所述报文数据请求相对应的报文数据;
预埋获取单元,用于响应于对所述目标测试单元的测试过程中所产生的预埋数据请求,调用相应的sql语句获取预埋数据。
8.根据权利要求7所述的系统,其特征在于,所述系统还包括:
队列构建单元,用于在同一挡板被多次调用时,利用所述单元测试框架中的mock构建队列,所述队列用于存放利用同一挡板被多次调用所获取到的报文数据。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510767038.6A CN105389256B (zh) | 2015-11-11 | 2015-11-11 | 一种单元测试方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510767038.6A CN105389256B (zh) | 2015-11-11 | 2015-11-11 | 一种单元测试方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105389256A CN105389256A (zh) | 2016-03-09 |
CN105389256B true CN105389256B (zh) | 2018-07-03 |
Family
ID=55421562
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510767038.6A Active CN105389256B (zh) | 2015-11-11 | 2015-11-11 | 一种单元测试方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105389256B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109857637A (zh) * | 2018-12-25 | 2019-06-07 | 杭州茂财网络技术有限公司 | 一种基于注解的Java语言方法覆盖率和方法输入输出统计方法及装置 |
Families Citing this family (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107306420B (zh) * | 2016-04-22 | 2020-02-07 | 中国移动通信集团设计院有限公司 | 一种确定测试频繁度的方法和装置 |
CN108572909B (zh) * | 2017-03-10 | 2021-07-16 | 阿里巴巴集团控股有限公司 | 测试用例的处理方法、装置及电子设备 |
CN109284222B (zh) * | 2017-07-20 | 2022-03-08 | 阿里巴巴集团控股有限公司 | 软件单元、数据处理系统中的项目测试方法、装置及设备 |
CN109739526A (zh) * | 2017-10-30 | 2019-05-10 | 北京京东尚科信息技术有限公司 | 代码更新方法和装置 |
CN108874565A (zh) * | 2018-06-28 | 2018-11-23 | 中国建设银行股份有限公司 | 挡板服务方法及系统 |
CN109254907B (zh) * | 2018-08-03 | 2021-06-15 | 挖财网络技术有限公司 | 一种基于Java的接口测试报告生成方法及系统 |
CN109739656B (zh) * | 2018-11-29 | 2020-11-27 | 东软集团股份有限公司 | 接口数据模拟方法、装置、存储介质和电子设备 |
CN110147326B (zh) * | 2019-05-23 | 2023-05-26 | 四川新网银行股份有限公司 | 基于Redis数据库的微服务自动化测试方法 |
CN111090587A (zh) * | 2019-12-11 | 2020-05-01 | 中国建设银行股份有限公司 | 投产点服务测试方法、装置、设备及存储介质 |
CN111124913B (zh) * | 2019-12-20 | 2023-08-18 | 广州品唯软件有限公司 | 数据模板的生成方法、数据模板的生成装置及存储介质 |
CN111209212B (zh) * | 2020-01-17 | 2023-10-27 | 中国工商银行股份有限公司 | 主机联机程序测试方法、装置及系统 |
CN111651346B (zh) * | 2020-04-27 | 2022-11-18 | 深圳平安医疗健康科技服务有限公司 | 前端组件的测试方法、装置、存储介质及计算机设备 |
CN111695328B (zh) * | 2020-06-16 | 2023-01-24 | 深圳前海微众银行股份有限公司 | 模拟测试报文生成方法、装置、设备及存储介质 |
CN112356761B (zh) * | 2020-09-22 | 2022-06-14 | 成都飞机工业(集团)有限责任公司 | 一种基于整机架设的飞行器运输方法 |
CN115344502B (zh) * | 2022-10-18 | 2023-03-10 | 中建电子商务有限责任公司 | 基于真实数据自动生成mock数据及自动加载的方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7865779B2 (en) * | 2007-08-23 | 2011-01-04 | International Business Machines Corporation | Server side logic unit testing |
CN104317722A (zh) * | 2014-11-13 | 2015-01-28 | 中国建设银行股份有限公司 | 一种基于Junit的单元测试方法及装置 |
CN104375933A (zh) * | 2014-09-18 | 2015-02-25 | 广州华多网络科技有限公司 | 一种单元测试方法和装置 |
-
2015
- 2015-11-11 CN CN201510767038.6A patent/CN105389256B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7865779B2 (en) * | 2007-08-23 | 2011-01-04 | International Business Machines Corporation | Server side logic unit testing |
CN104375933A (zh) * | 2014-09-18 | 2015-02-25 | 广州华多网络科技有限公司 | 一种单元测试方法和装置 |
CN104317722A (zh) * | 2014-11-13 | 2015-01-28 | 中国建设银行股份有限公司 | 一种基于Junit的单元测试方法及装置 |
Non-Patent Citations (1)
Title |
---|
C/C++单元自动化覆盖测试框架的研究与实现;孙华衿;《中国优秀硕士学位论文全文数据库 信息科技辑》;20111015(第10期);论文第13-14页第3.2节,第15-16页第3.3节,图3-1、3-2 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109857637A (zh) * | 2018-12-25 | 2019-06-07 | 杭州茂财网络技术有限公司 | 一种基于注解的Java语言方法覆盖率和方法输入输出统计方法及装置 |
CN109857637B (zh) * | 2018-12-25 | 2022-04-15 | 杭州茂财网络技术有限公司 | 基于注解的Java语言方法覆盖率和方法输入输出统计方法 |
Also Published As
Publication number | Publication date |
---|---|
CN105389256A (zh) | 2016-03-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105389256B (zh) | 一种单元测试方法及系统 | |
CN111414172B (zh) | 应用软件自动部署发布系统及方法 | |
US9465718B2 (en) | Filter generation for load testing managed environments | |
CN109302522A (zh) | 测试方法、装置以及计算机系统和介质 | |
CN105808437B (zh) | 基于测试用例数据表的自动化测试方法及系统 | |
US20080120602A1 (en) | Test Automation for Business Applications | |
CN107832207A (zh) | 接口性能测试方法、装置、存储介质和计算机设备 | |
US20130339931A1 (en) | Application trace replay and simulation systems and methods | |
CN107526676B (zh) | 一种跨系统测试方法及装置 | |
CN107168844B (zh) | 一种性能监控的方法及装置 | |
CN106487603A (zh) | 一种响应测试方法及装置 | |
CN112241360A (zh) | 一种测试用例生成方法、装置、设备及存储介质 | |
CN111737140A (zh) | 接口自动化测试方法、装置、设备及计算机可读存储介质 | |
CN110007921A (zh) | 一种代码发布方法及装置 | |
US20110016454A1 (en) | Method and system for testing an order management system | |
CN111309624A (zh) | 测试方法、装置、设备及存储介质 | |
CN112561690B (zh) | 信用卡分期业务接口的测试方法、系统、设备及存储介质 | |
CN117370203A (zh) | 自动化测试方法、系统、电子设备及存储介质 | |
CN112230938B (zh) | 工业互联网的租赁产品的配置方法和装置 | |
CN110618943B (zh) | 安防服务测试方法、装置、电子设备及可读存储介质 | |
CN113986753A (zh) | 接口测试方法、装置、设备及存储介质 | |
CN112433946A (zh) | 接口测试管理方法、装置、设备及存储介质 | |
Wolf et al. | Automated testing for continuous delivery pipelines | |
CN107885659A (zh) | 对客户端的请求模拟响应的方法及装置、设备 | |
CN118261143B (zh) | Unity环境下的Json数据解析方法、装置、设备及介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |