一种代码测试方法及装置制造方法及图纸

技术编号:11793799 阅读:109 留言:0更新日期:2015-07-29 20:15
本发明专利技术提供一种代码测试方法及装置,在测试每个被测试代码时,可以基于maven标准目录结构,创建被测试代码和测试代码的工程目录,然后将Cobertura测试包存储至工程目录中资源目录指定的存储位置中,并将被测试代码和测试代码的工程目录与预先创建的构建文件关联,使得构建文件可以调用Cobertura测试包将Ant工具和Cobertura工具结合来对被测试代码进行单元测试并得到所述被测试代码的代码覆盖率情况,这样对于每个被测试代码来说,只需要基于maven标准目录结构创建工程目录,基于工程目录来存储所用的Cobertura测试包并关联构建文件来获得代码覆盖率情况,提高测试的通用性。

【技术实现步骤摘要】
一种代码测试方法及装置
本专利技术涉及软件测试
,更具体地说,涉及一种代码测试方法及装置。
技术介绍
软件测试是软件构建过程中非常重要的一环,通过软件测试可以发现软件隐藏的问题,并衡量软件的质量。在所有的软件测试中,单元测试是一个重要环节,其中单元测试是针对应用程序中可测试的最小单元的测试,所述最小单元一般指方法、类以及可实现一个功能的代码段(可以称为功能模块等被测试代码)。目前单元测试的主要方法是获取应用程序中可测试的最小单元,将其使用的程序代码同应用程序代码的其余部分隔离开来进行测试。衡量最小单元的一个很重要的指标是最小单元的代码覆盖率。常用的代码覆盖率测试原理是将JUnit单元测试与字节码工具(byte-code-instrumentation)相结合,通过对编译后的java字节码文件进行插桩,使得在最小单元的测试执行过程中能自动统计每一行代码是否被执行,从而获得代码被覆盖的情况。据此原理,涌现出很多不同的覆盖率检验工具,但是现有的覆盖率检测工具的复用性不高。
技术实现思路
有鉴于此,本专利技术提供一种代码测试方法及装置,用于提高测试的复用性。为了实现该目的,本专利技术提供如下技术方案:本专利技术提供一种代码测试方法,所述方法包括:基于maven标准目录结构,创建被测试代码和测试代码的工程目录,以使所述被测试代码和测试代码的工程目录的结构为所述maven标准目录结构;将Cobertura测试包存储至所述工程目录中资源目录指定的存储位置中;将所述被测试代码和测试代码的工程目录与预先创建的构建文件关联,以使所述构建文件调用所述Cobertura测试包将Ant工具和Cobertura工具结合来对所述被测试代码进行单元测试并得到所述被测试代码的代码覆盖率情况;从所述被测试代码中选择需要测试的测试单元,并剔除所述被测试代码中无需测试的测试单元;利用Mock工具模拟未完成的协同对象,所述协同对象为所述被测试代码运行时所调用的对象,以辅助使处理后的所述被测试代码正常运行;获取处理后的所述被测试代码的测试代码,并运行所述构建文件和所述测试代码,得到测试结果,所述测试结果用于指示所述被测试代码的代码覆盖率情况和运行情况。优选地,所述构建文件的预先创建包括:使用mkdir命令创建所述构建文件的临时目录,所述临时目录用于提供测试过程生成的临时文件的目录;创建所述构建文件下的complie目标,所述complie目标用于调用Ant的javac任务对所述被测试代码和所述测试代码进行编译;创建所述构建文件下的instrument目标,以调用Cobertura的instrument任务,对所述被测试代码中的被测java程序编译所得class文件进行插桩;创建所述构建文件下的test目标以调用Ant的JUnit任务对所述被测试代码进行单元测试,在进行单元测试时通过所述test目标的name属性指定将要运行的所述测试代码的名称;创建所述构建文件下的coverage-report目标,所述coverage-report目标用于调用Cobertura提供的cobertura-report任务来生成所述测试结果中的代码覆盖率测试报告;创建所述构建文件下的coverage-check目标以调用Cobertura的代码覆盖率指标检查任务;创建所述构建文件下的clean目标以调用Ant的delete命令来删除所述临时目录下的所述临时文件。优选地,从所述被测试代码中选择需要测试的测试单元,并剔除所述被测试代码中无需测试的测试单元,包括:通过第一正则表达式在所述instrument目标中选择所述被测试代码中需要测试的测试单元,并剔除所述被测试代码中无需测试的测试单元;所述测试单元包括类和包。优选地,剔除所述被测试代码中无需测试的测试单元,包括:对所述被测试代码中的方法进行解析,得到所述方法的参数和返回类型;基于所述方法的参数和返回类型,将所述被测试代码中的set方法、get方法和init方法剔除;将所述instrument目标使用的方法和所述被测试代码中除set方法、get方法和init方法后剩余的每个方法分别与判定条件进行比较,得到比较结果,所述判定条件通过第二正则表达式表示;当所述比较结果表明所述方法的参数信息满足所述判定条件时,将满足所述判定条件的方法剔除。优选地,所述利用Mock工具模拟未完成的协同对象,包括:导入与JMock工具相关的jar包,以使所述测试代码调用JMock工具封装的方法;使用@runwith来注释所述JMock工具内的测试运行器,所述测试运行器用于管理所述协同对象中的测试类;创建Mockery的context对象和Mock对象;通过contex创建Mock对象的实例,所述实例为利用Mock工具模拟的所述协同对象;创建Exception对象来模拟所述实例的协同行为,所述协同行为用于使处理后的所述被测试代码可正常运行。本专利技术还提供一种代码测试装置,所述装置包括:创建单元,用于基于maven标准目录结构,创建被测试代码和测试代码的工程目录,以使所述被测试代码和测试代码的工程目录的结构为所述maven标准目录结构;存储单元,用于将Cobertura测试包存储至所述工程目录中资源目录指定的存储位置中;关联单元,用于将所述被测试代码和测试代码的工程目录与预先创建的构建文件关联,以使所述构建文件调用所述Cobertura测试包将Ant工具和Cobertura工具结合来对所述被测试代码进行单元测试并得到所述被测试代码的代码覆盖率情况;获取单元,用于从所述被测试代码中选择需要测试的测试单元,并剔除所述被测试代码中无需测试的测试单元;模拟单元,用于利用Mock工具模拟未完成的协同对象,所述协同对象为所述被测试代码运行时所调用的对象,以辅助使处理后的所述被测试代码正常运行;测试单元,用于获取处理后的所述被测试代码的测试代码,并运行所述构建文件和所述测试代码,得到测试结果,所述测试结果用于指示所述被测试代码的代码覆盖率情况和运行情况。优选地,所述装置还包括构建单元,用于预先创建所述构建文件;所述构建单元包括:第一创建子单元,用于使用mkdir命令创建所述构建文件的临时目录,所述临时目录用于提供测试过程生成的临时文件的目录;第二创建子单元,用于创建所述构建文件下的complie目标,所述complie目标用于调用Ant的javac任务对所述被测试代码和所述测试代码进行编译;第三创建子单元,用于创建所述构建文件下的instrument目标,以调用Cobertura的instrument任务,对所述被测试代码中的被测java程序编译所得class文件进行插桩;第四创建子单元,用于创建所述构建文件下的test目标以调用Ant的JUnit任务对所述被测试代码进行单元测试,在进行单元测试时通过所述test目标的name属性指定将要运行的所述测试代码的名称;第五创建子单元,用于创建所述构建文件下的coverage-report目标,所述coverage-report目标用于调用Cobertura提供的cobertura-report任务来生成所述测试结果中的代码覆盖率测试报告;第六创建子单元,用于创建所述构建文件下的coverage-check目标以调用本文档来自技高网...
一种代码测试方法及装置

【技术保护点】
一种代码测试方法,其特征在于,所述方法包括:基于maven标准目录结构,创建被测试代码和测试代码的工程目录,以使所述被测试代码和测试代码的工程目录的结构为所述maven标准目录结构;将Cobertura测试包存储至所述工程目录中资源目录指定的存储位置中;将所述被测试代码和测试代码的工程目录与预先创建的构建文件关联,以使所述构建文件调用所述Cobertura测试包将Ant工具和Cobertura工具结合来对所述被测试代码进行单元测试并得到所述被测试代码的代码覆盖率情况;从所述被测试代码中选择需要测试的测试单元,并剔除所述被测试代码中无需测试的测试单元;利用Mock工具模拟未完成的协同对象,所述协同对象为所述被测试代码运行时所调用的对象,以辅助使处理后的所述被测试代码正常运行;获取处理后的所述被测试代码的测试代码,并运行所述构建文件和所述测试代码,得到测试结果,所述测试结果用于指示所述被测试代码的代码覆盖率情况和运行情况。

【技术特征摘要】
1.一种代码测试方法,其特征在于,所述方法包括:基于maven标准目录结构,创建被测试代码和测试代码的工程目录,以使所述被测试代码和测试代码的工程目录的结构为所述maven标准目录结构;将Cobertura测试包存储至所述工程目录中资源目录指定的存储位置中;将所述被测试代码和测试代码的工程目录与预先创建的构建文件关联,以使所述构建文件调用所述Cobertura测试包将Ant工具和Cobertura工具结合来对所述被测试代码进行单元测试并得到所述被测试代码的代码覆盖率情况;从所述被测试代码中选择需要测试的测试单元,并剔除所述被测试代码中无需测试的测试单元;利用Mock工具模拟未完成的协同对象,所述协同对象为所述被测试代码运行时所调用的对象,以辅助使处理后的所述被测试代码正常运行;获取处理后的所述被测试代码的测试代码,并运行所述构建文件和所述测试代码,得到测试结果,所述测试结果用于指示所述被测试代码的代码覆盖率情况和运行情况。2.根据权利要求1所述的方法,其特征在于,所述构建文件的预先创建包括:使用mkdir命令创建所述构建文件的临时目录,所述临时目录用于提供测试过程生成的临时文件的目录;创建所述构建文件下的complie目标,所述complie目标用于调用Ant的javac任务对所述被测试代码和所述测试代码进行编译;创建所述构建文件下的instrument目标,以调用Cobertura的instrument任务,对所述被测试代码中的被测java程序编译所得class文件进行插桩;创建所述构建文件下的test目标以调用Ant的JUnit任务对所述被测试代码进行单元测试,在进行单元测试时通过所述test目标的name属性指定将要运行的所述测试代码的名称;创建所述构建文件下的coverage-report目标,所述coverage-report目标用于调用Cobertura提供的cobertura-report任务来生成所述测试结果中的代码覆盖率测试报告;创建所述构建文件下的coverage-check目标以调用Cobertura的代码覆盖率指标检查任务;创建所述构建文件下的clean目标以调用Ant的delete命令来删除所述临时目录下的所述临时文件。3.根据权利要求2所述的方法,其特征在于,从所述被测试代码中选择需要测试的测试单元,并剔除所述被测试代码中无需测试的测试单元,包括:通过第一正则表达式在所述instrument目标中选择所述被测试代码中需要测试的测试单元,并剔除所述被测试代码中无需测试的测试单元;所述测试单元包括类和包。4.根据权利要求3所述的方法,其特征在于,剔除所述被测试代码中无需测试的测试单元,包括:对所述被测试代码中的方法进行解析,得到所述方法的参数和返回类型;基于所述方法的参数和返回类型,将所述被测试代码中的set方法、get方法和init方法剔除;将所述instrument目标使用的方法和所述被测试代码中除set方法、get方法和init方法后剩余的每个方法分别与判定条件进行比较,得到比较结果,所述判定条件通过第二正则表达式表示;当所述比较结果表明所述方法的参数信息满足所述判定条件时,将满足所述判定条件的方法剔除。5.根据权利要求1所述的方法,其特征在于,所述利用Mock工具模拟未完成的协同对象,包括:导入与JMock工具相关的jar包,以使所述测试代码调用JMock工具封装的方法;使用@runwith来注释所述JMock工具内的测试运行器,所述测试运行器用于管理所述协同对象中的测试类;创建Mockery的context对象和Mock对象;通过contex创建Mock对象的实例,所述实例为利用Mock工具模拟的所述协同对象;创建Exception对象来模拟所述实例的协同行为,所述协同行为用于使处理后的所述被测试代码可正常运行。6.一种代码测试装置,其特征在于,所述装置包括:创建单元,用于基于maven标准目录结构,创建被测试代码和测试代码的工程目录,以使所述被测试代码和测试代码的工程目录的结构为所述maven标准目录结构;存储单元,用于将Co...

【专利技术属性】
技术研发人员:段梅
申请(专利权)人:北京润科通用技术有限公司
类型:发明
国别省市:北京;11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1