用于代码的单元测试的装置及方法

文档序号:9765889阅读:238来源:国知局
用于代码的单元测试的装置及方法
【技术领域】
[0001]本发明公开的实施例涉及用于代码的单元测试的装置及方法,具体而言,涉及一种利用由编程语言制作的对象代码的解析(parsing)信息而按特定单元分别测试对象代码的技术。
【背景技术】
[0002]在利用编程语言(例如,Java语言)开发代码的过程中,对代码的各个部分进行的测试在防止代码所引起的系统运作的错误而保证高品质的程序的层面上非常重要。尤其,复杂的代码通常根据各种测试用例(test case)来运行而进行测试,而为了提高开发的效率性,有必要减少用于这种测试的成本和时间。
[0003]例如,在现有技术中,开发者的目的在于在利用Java语音制作的代码中按各个类(class)的方法(method)分别直接制作测试用例,从而实现所需要的方法覆盖(methodcoverage)(即,源代码(source code)中被测试的方法(method)的比率)。还有,为了对存在大量分支的逻辑性复杂的代码实现满意的分支覆盖(即,源代码中被测试的分支(branch)的比率),带来如下的不便性:按照分支的情况数一一地制作出只改变测试所需的特定值而具有类似的内容的测试用例。因此,需要提出一种新的单元测试技术来克服这些缺点。

【发明内容】

[0004]本发明公开的实施例提供一种执行代码的单元测试的装置及方法。
[0005]根据示例性实施例,提供一种单元测试装置,包括:解析部,解析(parsing)对象代码而生成解析信息;测试用例生成部,基于所述解析信息来生成所述对象代码的各个测试单元的基本测试用例(base test case);代码生成部,基于所述解析信息来生成所述对象代码的外部函数调用部分被置换为存根(stub)的被生成源;测试执行部,把针对所述基本测试用例而设定的测试数据应用于所述被生成源而执行各个测试单元的测试。
[0006]其中,所述对象代码可由Java语音制作。
[0007]其中,所述单元测试装置还可以包括测试用例编辑部,提供与所述基本测试用例相关联的用户接口,并根据所述用户接口中执行的用户输入而设定所述测试数据。
[0008]其中,所述测试用例编辑部还可以利用所述解析信息而把所述测试数据的类型表现于所述用户接口。
[0009]其中,所述测试数据可包括所述测试单元内的变量的值、外部函数的返回值、分支的标签值中的至少一个。
[0010]根据另一示例性实施例,提供一种单元测试方法,包括如下步骤:通过解析对象代码而生成解析信息;基于所述解析信息来生成所述对象代码的各个测试单元的基本测试用例;基于所述解析信息来生成所述对象代码的外部函数调用部分被置换为存根的被生成源;把针对所述基本测试用例而设定的测试数据应用于所述被生成源而执行各个测试单元的测试。
[0011]其中,所述对象代码可由Java语音制作。
[0012]其中,所述单元测试方法还可以包括如下步骤:提供与所述基本测试用例相关联的用户接口 ;根据所述用户接口中执行的用户输入来设定所述测试数据。
[0013]其中,所述单元测试方法还可以包括如下步骤:利用所述解析信息来把所述测试数据的类型表现于所述用户接口。
[0014]其中,所述测试数据可包括所述测试单元内的变量值、外部函数的返回值、分支的标签值中的至少一个。
[0015]根据又一示例性实施例,提供一种存储在存储介质中的计算机程序,其与硬件结合而用于执行前述的单元测试方法。
[0016]根据预定的实施例,可提供一种单元测试框架,其利用由Java语言等编程语言制作的对象代码的解析信息而使对象代码的特定单元(例如,Java类的方法)的测试变得容易O
[0017]根据预定的实施例,开发者没有必要为了对象代码的单元测试而另行制作测试用例,并可以按对象代码的测试单元分别自动制作测试用例,并可以通过亲用户的方式来设定单元测试所需的值。
[0018]根据预定的实施例,可以容易地实现所期望的方法覆盖以及分支覆盖。
【附图说明】
[0019]图1是表示根据示例性的实施例而利用由编程语言制作的代码的解析信息而执行代码的单元测试的系统的图。
[0020]图2是表示根据示例性的实施例而设定测试数据时适用的用户接口的图。
[0021]图3是用于说明根据示例性的实施例而生成单元测试项目的情形的图。
[0022]图4是表示根据示例性的实施例而执行代码的单元测试的过程的图。
[0023]符号说明
[0024]100:单元测试系统101:测试对象代码
[0025]102:基本测试用例104:被生成源
[0026]105:报告110:解析部
[0027]120:测试用例生成部130:测试用例编辑部
[0028]140:代码生成部150:测试执行部
【具体实施方式】
[0029]以下,将参照附图而对根据本发明的具体的实施形态进行说明。以下的详细说明是为了帮助对本说明书上记载的方法、装置和/或系统的全面的理解而提供的。然而这仅仅是示例性的,本发明并不局限于此。
[0030]在对本发明的实施例进行说明时,当判断为对与本发明相关的公知技术进行的具体的说明给本发明的主旨带来不必要的混乱时,将省略对其的详细说明。还有,下述的术语是考虑到本发明的功能而做出定义的术语,其可以根据使用者、运用者的意图或者惯例等而改变。因此,其需要以覆盖本说明书的全部内容为基础而做出定义。在详细的说明中使用到的术语只是用于描述本发明的实施例的,而绝对不能理解为限定性的。在没有被明确地使用为其他用途时,单数形态的表述方式包括复数形态的意思。本申请中使用的术语只是用于说明特定的实施例,而不是要限制权利范围。在本申请中,“包括”或者“具有”等表述形式用于指某种特性、数字、步骤、操作、要素和这些的一部分或者组合的存在性,而不能被解释为其排除了所记载的内容以外的一个或一个以上的其他特性、数字、步骤、操作、要素和这些的一部分或者组合的存在性或可附加性。
[0031]图1表示根据示例性的实施例而利用由编程语言制作的代码的解析信息来执行该代码的单元测试的系统。
[0032]如图1所示,示例性的单元测试系统100包括:解析部110、测试用例生成部120、测试用例编辑部130、代码生成部140以及测试执行部150。单元测试系统100的上述的各个模块分别可以实现为硬件。例如,单元测试系统100可以在计算装置的内部得到实现,或者包含于计算装置的内部。这种计算装置可以包括一个以上的处理器以及可通过处理器而访问的存储器等计算机可读存储介质。计算机可读存储介质既可以配置于处理器的内部或外部,也可以通过公知的多样的单元而与处理器连接。计算机可读存储介质中可以存储用于控制计算装置的计算机可运行命令语。处理器可以执行存储于计算机可读存储介质中的命令语。这种命令语在通过处理器而被运行的情况下,可以使处理器执行根据示例性的实施例的操作。另外,计算装置还可以包括用于支持该计算装置与至少一个外部装置之间的输入/输出和/或通信的接口装置,并可以通过接口装置而与外部装置连接。此外,计算装置还可以包括其他多样的组件(例如,输入装置和/或输出装置),接口装置可以为这些组件提供接口。输入装置的例包括:指点装置,如鼠标;键盘;触摸感应输入装置;语音输入装置,如麦克风。输出装置的例包括:显示装置;打印机;音响机和/或网卡。据此,上述的计算装置可以实现:单元测试系统100的解析部110、测试用例生成部120、测试用例编辑部130、代码生成部140以及测试执行部150。
[0033]接下来参照图1而对单元测试系统100的各个模块进行更为详细的说明。为了说明的方便性,以下将会述及如下操作:这种操作旨在使单元测试系统100执行由Java语音制作的源代码(以下,也会称之为“测试对象代码”)101的各个测试单元(例如,类的方法)的测试。然而,这些操作毕竟是示例性的。
[0034]如图1所示的解析部110构成为能够解析作为Java源的测试对象代码101。解析部110可以通过解析分析而从测试对象代码101中收集以下项目中的至少一个而生成解析
?目息O
[0035]-语句(statement)(例如,if符、while 符、for 门、do 符等)
[0036]-表述符(express1n)(例如,前缀(prefix)/ 中缀(infix) / 后缀(postfix)表述符、代入符(assignment express1n)等)
[0037]-布尔值(boolean)、数值(numeric)等数据类型;字符(literal)值以及空(null)值
[0038]-修饰符(modifier)(例如,public、static、final等)
[0039]-通用(generic)信息
[0040]例如,解析部110可以构成为利用Java开发工具包(Java Development Kit: JDK)以及Eclipse的解析器(parser)来分析对象代码101。
[0041]测试用例生成部120构成为基于所生成的解析信息来生成各个测试单元的基本测试用例。基本测试用例102可以把测试对象代码101的构成要素表示为预定的结构(例如,树状结构)。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1