CN112527657B - 单元测试中自动插桩的方法及设备 - Google Patents
单元测试中自动插桩的方法及设备 Download PDFInfo
- Publication number
- CN112527657B CN112527657B CN202011496852.6A CN202011496852A CN112527657B CN 112527657 B CN112527657 B CN 112527657B CN 202011496852 A CN202011496852 A CN 202011496852A CN 112527657 B CN112527657 B CN 112527657B
- Authority
- CN
- China
- Prior art keywords
- function
- target
- information
- pile
- unit test
- 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
Images
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/3668—Software testing
- G06F11/3696—Methods or tools to render software testable
-
- 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/362—Software debugging
- G06F11/3644—Software debugging by instrumenting at runtime
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02P—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN THE PRODUCTION OR PROCESSING OF GOODS
- Y02P90/00—Enabling technologies with a potential contribution to greenhouse gas [GHG] emissions mitigation
- Y02P90/30—Computing systems specially adapted for manufacturing
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
技术领域
本申请实施例涉及计算机技术领域,尤其涉及一种单元测试中自动插桩的方法及设备。
背景技术
单元测试,是指对软件中的最小可测试单元进行检查和验证。充分的单元测试,可以在早期发现软件BUG并进行修复,大大提高软件质量,降低后期维护成本。
在单元测试项目中,需要先将单元测试程序转换成可执行的程序文件,才能够对其中的函数或者内容进行测试。当单元测试程序中涉及的函数较多时,部分函数的函数体可能并不在单元测试工程中,导致单元测试程序无法转换成可执行的文件,进而无法进行单元测试。
目前,当单元测试程序中存在函数体不在单元测试工程中的外部函数时,通常是由软件测试工程师手动编写相关的桩函数,并通过插桩的方式来代替上述外部函数,然而手动编写桩函数的方式费时费力,导致单元测试的效率较低。
发明内容
本申请实施例提供一种单元测试中自动插桩的方法及设备,可以在单元测试中自动生成桩函数并进行自动插桩,能够有效提升单元测试的效率。
第一方面,本申请实施例提供一种单元测试中自动插桩的方法,该方法包括:
查找单元测试工程中的目标函数,所述目标函数包括函数体不在所述单元测试工程中的函数;
获取所述目标函数的函数信息,并根据所述目标函数的函数信息生成与所述目标函数对应的桩函数;
将所述桩函数插入到所述单元测试工程中。
在一种可行的实施方式中,所述根据所述目标函数的函数信息生成与所述目标函数对应的桩函数之前,还包括:
获取预设的函数信息与桩函数之间的对应关系;
所述根据所述目标函数的函数信息生成与所述目标函数对应的桩函数,包括:
根据所述预设的函数信息与桩函数之间的对应关系,确定所述目标函数的函数信息对应的目标桩函数;
将所述目标桩函数确定为所述目标函数对应的桩函数。
在一种可行的实施方式中,所述根据所述预设的函数信息与桩函数之间的对应关系,确定所述目标函数的函数信息对应的目标桩函数,包括:
确定所述单元测试工程的测试结果是否与所述目标函数的运行结果相关;
当所述单元测试工程的测试结果与所述目标函数的运行结果相关时,根据所述预设的函数信息与桩函数之间的对应关系,确定所述目标函数的函数信息对应的目标桩函数,其中,所述目标桩函数的函数信息与所述目标函数的函数信息相同。
在一种可行的实施方式中,所述获取所述目标函数的函数信息,包括:
根据所述目标函数的接口,获取所述目标函数的函数信息;其中,所述目标函数的函数信息包括以下信息中的至少一种:所述目标函数的输入参数、所述目标函数的输出参数、所述目标函数的类型、所述目标函数中参数的类型。
在一种可行的实施方式中,将所述桩函数插入到所述单元测试工程中之后,所述方法还包括:
检测所述目标函数的接口是否发生变化;
当所述目标函数的接口发生变化时,根据所述目标函数变化后的接口,获取所述目标函数变化后的函数信息;
根据所述目标函数变化后的函数信息,更新所述目标函数对应的桩函数。
第二方面,本申请实施例提供一种单元测试中自动插桩的装置,该装置包括:
查找模块,用于查找单元测试工程中的目标函数,所述目标函数包括函数体不在所述单元测试工程中的函数;
处理模块,用于获取所述目标函数的函数信息,并根据所述目标函数的函数信息生成与所述目标函数对应的桩函数;
所述处理模块,还用于将所述桩函数插入到所述单元测试工程中。
在一种可行的实施方式中,所述处理模块用于:
获取预设的函数信息与桩函数之间的对应关系;
根据所述预设的函数信息与桩函数之间的对应关系,确定所述目标函数的函数信息对应的目标桩函数;
将所述目标桩函数确定为所述目标函数对应的桩函数。
在一种可行的实施方式中,所述处理模块用于:
确定所述单元测试工程的测试结果是否与所述目标函数的运行结果相关;
当所述单元测试工程的测试结果与所述目标函数的运行结果相关时,根据所述预设的函数信息与桩函数之间的对应关系,确定所述目标函数的函数信息对应的目标桩函数,其中,所述目标桩函数的函数信息与所述目标函数的函数信息相同。
在一种可行的实施方式中,所述处理模块用于:
根据所述目标函数的接口,获取所述目标函数的函数信息;其中,所述目标函数的函数信息包括以下信息中的至少一种:所述目标函数的输入参数、所述目标函数的输出参数、所述目标函数的类型、所述目标函数中参数的类型。
在一种可行的实施方式中,所述处理模块还用于:
将所述桩函数插入到所述单元测试工程中之后,检测所述目标函数的接口是否发生变化;
当所述目标函数的接口发生变化时,根据所述目标函数变化后的接口,获取所述目标函数变化后的函数信息;
根据所述目标函数变化后的函数信息,更新所述目标函数对应的桩函数。
第三方面,本申请实施例提供一种电子设备,包括:至少一个处理器和存储器;
所述存储器存储计算机执行指令;
所述至少一个处理器执行所述存储器存储的计算机执行指令,使得所述至少一个处理器执行如第一方面提供的单元测试中自动插桩的方法。
第四方面,本申请实施例提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机执行指令,当处理器执行所述计算机执行指令时,实现如第一方面提供的单元测试中自动插桩的方法。
第五方面,本申请实施例提供一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时,实现如第一方面提供的单元测试中自动插桩的方法。
本申请实施例所提供的单元测试中自动插桩的方法及设备,在进行单元测试时,先确定待测试程序中的目标函数,该目标函数包括函数体不在单元测试工程中的函数,然后获取该目标函数的函数信息,并根据该目标函数的函数信息生成与目标函数对应的桩函数,将该桩函数插入到单元测试工程中。即在本申请中,当单元测试过程中存在函数体不在单元测试工程中的外部函数时,可以根据外部函数的函数信息自动生成对应的桩函数,并进行自动插桩,不需要人为操作,省时省力,可以有效提升单元测试的效率。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对本申请实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其它的附图。
图1为本申请实施例中提供的一种单元测试的框架示意图;
图2为本申请实施例中提供的一种单元测试中自动插桩的方法的流程示意图一;
图3为本申请实施例中提供的一种单元测试中自动插桩的方法的流程示意图二;
图4为本申请实施例中提供的一种单元测试中自动插桩的装置的程序模块示意图;
图5为本申请实施例中提供的一种电子设备的硬件结构示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
单元测试(unit testing),是在软件开发完成后,由开发人员根据逻辑覆盖、代码覆盖、初始值、临界值和期望值等条件,编写对软件代码的测试代码,用以检测软件代码的正确性,从而帮助开发人员发现问题、提高软件质量。
通常而言,一个单元测试是用于判断某个特定条件(或者场景)下某个特定函数的行为。例如把一个很大的值放入一个有序列表(list)中去,然后确认该值出现在list的尾部,以实现单元测试;或者,从字符串中删除匹配某种模式的字符,然后确认字符串不再包含这些字符实现单元测试。充分的单元测试,可以在早期发现软件BUG并进行修复,大大提高软件质量,降低后期维护成本。
如图1所示,图1为本申请实施例中提供的一种单元测试的框架示意图。在图1中,测试用例(Test Case)是指对被测单元进行测试任务的描述,体现测试方案、方法、技术和策略。其内容包括测试目标、测试环境、输入数据、测试步骤、预期结果、测试脚本等,最终形成文档。简单地认为,测试用例是为被测单元编制的一组测试输入、执行条件以及预期结果,用于核实是否满足某个特定软件需求。其中,测试用例的设计方法主要有黑盒测试法和白盒测试法。
驱动模块是用来模拟被测单元的上一级单元,相当于被测单元的主程序。它接收数据并将相关数据传送给被测单元,启用被测单元并打印出相应结果。驱动模块的目的很单纯,就是访问类库的属性和方法来确定类库是否正确。
桩函数是模拟被测试单元所调用的函数,而不是软件产品的组成部分。主程序作为驱动模块,与之直接相连的模块是桩模块,也称为“替身模块”。桩函数本身不执行任何功能,只在它作为替身被调用时返回静态值。
目前,当单元测试程序中存在函数体不在单元测试工程中的外部函数时,通常是由软件测试工程师手动编写相关的桩函数,并通过插桩的方式来代替上述外部函数,然而手动编写桩函数的方式费时费力,导致单元测试的效率较低。
为了解决上述技术问题,本申请实施例提供了一种单元测试中自动插桩的方法,当单元测试过程中存在函数体不在单元测试工程中的外部函数时,可以根据外部函数的函数信息自动生成对应的桩函数,并进行自动插桩,不需要人为操作,省时省力,可以有效提升单元测试的效率。下面采用详细的实施例进行详细说明。
参照图2,图2为本申请实施例中提供的一种单元测试中自动插桩的方法的流程示意图一,在一种可行的实施方式中,该方法包括:
S201、查找单元测试工程中的目标函数,该目标函数包括函数体不在单元测试工程中的函数。
其中,函数体是编程语言中定义一个函数功能的所有代码组成的整体,其通常包含若干语句,能够完成一个函数的具体功能。
本申请实施例中,可以通过遍历单元测试工程中的各个函数,查找出目标函数,该目标函数包括函数体不在单元测试工程中、而接口在单元测试工程中的函数。
可以理解的是,在一些单元测试工程中,如果项目工程较大,涉及的函数会较多,如果将所有函数的函数体均放置在单元测试工程中,可能或导致项目工程过大。故在单元测试过程中,会存在一些函数的函数体在其它测试单元中,而不在当前测试的测试单元中。
在另一些实施例中,上述目标函数中还可以包括单元测试工程中函数体尚未编写完成的函数。
S202、获取目标函数的函数信息,并根据目标函数的函数信息生成与目标函数对应的桩函数。
在一种可行的实施方式中,可以根据上述目标函数的接口,获取上述目标函数的函数信息,如目标函数的输入参数、输出参数、类型、目标函数中参数的类型等。
在获取到目标函数的函数信息后,即可根据目标函数的函数信息生成与目标函数对应的桩函数。其中,生成的桩函数的输入参数、输出参数等相关信息需要与上述目标函数一致。
其中,不同的函数信息可以生成相同或者不同的桩函数。
S203、将桩函数插入到单元测试工程中。
其中,在生成桩函数并插入到单元测试工程中后,单元测试工程中就存在了上述目标函数的定义等信息。然后,对整个单元测试工程进行编译,就可以生成可执行文件,执行后续的单元测试流程。
本申请实施例所提供的单元测试中自动插桩的方法,当单元测试过程中存在函数体不在单元测试工程中的外部函数时,可以根据外部函数的函数信息自动生成对应的桩函数,并进行自动插桩,不需要人为操作,省时省力,可以有效提升单元测试的效率。
基于上述实施例中所描述的内容,参照图3,图3为本申请实施例中提供的一种单元测试中自动插桩的方法的流程示意图二,在一种可行的实施方式中,该方法包括:
S301、获取预设的函数信息与桩函数之间的对应关系。
在一种可行的实施方式中,可以预先设定一些桩函数生成规则,包括设定函数信息与桩函数之间的对应关系等。例如,设定在一定的输入参数、输出参数、函数中参数的类型、函数的类型下,如何生成桩函数。
S302、查找单元测试工程中的目标函数,该目标函数包括函数体不在单元测试工程中的函数。
S303、获取目标函数的函数信息,并根据上述预设的函数信息与桩函数之间的对应关系,确定目标函数的函数信息对应的目标桩函数。
本申请实施例中,在确定目标函数后,根据目标函数的接口获取目标函数的函数信息,并根据预先确定的函数信息与桩函数之间的对应关系,确定目标函数的函数信息对应的目标桩函数。
其中,不同的函数信息可以生成相同或者不同的桩函数。
S304、将上述目标桩函数确定为目标函数对应的桩函数,并插入到单元测试工程中。
本申请实施例中,在在确定目标桩函数后,即可将该桩函数确定为目标函数对应的桩函数,并插入到单元测试工程中。
其中,在生成桩函数并插入到单元测试工程中后,单元测试工程中就存在了上述目标函数的定义等信息。然后,对整个单元测试工程进行编译,就可以生成可执行文件,执行后续的单元测试流程。
即本申请实施例所提供的单元测试中自动插桩的方法,当单元测试过程中存在函数体不在单元测试工程中的外部函数时,可以根据外部函数的函数信息自动生成对应的桩函数,并进行自动插桩,不需要人为操作,省时省力,可以有效提升单元测试的效率。
基于上述实施例中所描述的内容,在一些实施方式中,针对一个目标函数,生成的桩函数可能与目标函数实际的函数体并不相同,在编译的时候,可能得到不同的编译结果。故在本申请实施例中,在生成桩函数前,可以先确定单元测试工程的测试结果是否与目标函数的运行结果相关,即确定目标函数的运行结果是否会对单元测试工程的测试结果产生实质性的影响。如果该目标函数运行的结果对整个单元测试工程的测试结果并不产生实质性的影响,那么只要生成的桩函数能够使得单元测试工程编译通过即可。如果该目标函数运行的结果对整个单元测试工程的测试结果有实质性的影响,那么在生成桩函数时,就需要模拟目标函数的函数体,生成一个函数体与目标函数的函数体较为类似或相同的桩函数,以保证单元测试的有效执行。
基于上述实施例中所描述的内容,在一种可行的实施方式中,将所述桩函数插入到所述单元测试工程中之后,上述单元测试中自动插桩的方法还包括:
检测目标函数的接口是否发生变化,当目标函数的接口发生变化时,根据目标函数变化后的接口,获取目标函数变化后的函数信息,根据目标函数变化后的函数信息,更新目标函数对应的桩函数。
可以理解的是,当目标函数的接口发生变化时,可能会使目标函数的函数信息发生变化,导致目标函数对应的桩函数失效,进而导致单元测试工程编译失败。传统的单元测试工程中,通常依靠人工修复或者重新构建单元测试工程,费时费力。在本申请实施例中,则可以实现对桩函数的自动更新,不需要人为操作,省时省力,可以有效提升单元测试的效率。
基于上述实施例中所描述的内容,本申请实施例中还提供一种单元测试中自动插桩的装置,参照图4,图4为本申请实施例中提供的一种单元测试中自动插桩的装置的程序模块示意图,该单元测试中自动插桩的装置40包括:
查找模块401,用于查找单元测试工程中的目标函数,该目标函数包括函数体不在单元测试工程中的函数。
处理模块402,用于获取目标函数的函数信息,并根据目标函数的函数信息生成与目标函数对应的桩函数。
处理模块402,还用于将上述目标函数对应的桩函数插入到单元测试工程中。
本申请实施例所提供的单元测试中自动插桩的装置40,当单元测试过程中存在函数体不在单元测试工程中的外部函数时,可以根据外部函数的函数信息自动生成对应的桩函数,并进行自动插桩,不需要人为操作,省时省力,可以有效提升单元测试的效率。
需要说明的是,本申请实施例中查找模块401、处理模块402具体执行的内容可以参阅图2至图3所示实施例中相关内容,此处不做赘述。
基于上述实施例中所描述的内容,在一种可行的实施方式中,处理模块402用于:
获取预设的函数信息与桩函数之间的对应关系,根据该对应关系,确定目标函数的函数信息对应的目标桩函数,并将该目标桩函数确定为目标函数对应的桩函数。
基于上述实施例中所描述的内容,在一种可行的实施方式中,处理模块402用于:
确定单元测试工程的测试结果是否与目标函数的运行结果相关;
当单元测试工程的测试结果与目标函数的运行结果相关时,根据预设的函数信息与桩函数之间的对应关系,确定目标函数的函数信息对应的目标桩函数,其中,目标桩函数的函数信息与目标函数的函数信息相同。
基于上述实施例中所描述的内容,在一种可行的实施方式中,处理模块402用于:
根据目标函数的接口,获取目标函数的函数信息;其中,目标函数的函数信息包括以下信息中的至少一种:目标函数的输入参数、目标函数的输出参数、目标函数的类型、目标函数中参数的类型。
基于上述实施例中所描述的内容,在一种可行的实施方式中,处理模块402还用于:
将桩函数插入到单元测试工程中之后,检测目标函数的接口是否发生变化;当目标函数的接口发生变化时,根据目标函数变化后的接口,获取目标函数变化后的函数信息;根据目标函数变化后的函数信息,更新目标函数对应的桩函数。
进一步的,基于上述实施例中所描述的内容,本申请实施例中还提供了一种电子设备,该电子设备包括至少一个处理器和存储器;其中,存储器存储计算机执行指令;上述至少一个处理器执行存储器存储的计算机执行指令,以实现如上述实施例中所描述的函数调用信息的记录方法的各个步骤,本实施例此处不再赘述。
为了更好的理解本申请实施例,参照图5,图5为本申请实施例提供的一种电子设备的硬件结构示意图。
如图5所示,本实施例的电子设备50包括:处理器501以及存储器502;其中:
存储器502,用于存储计算机执行指令;
处理器501,用于执行存储器存储的计算机执行指令,以实现上述实施例中所描述的函数调用信息的记录方法的各个步骤,具体可以参见前述方法实施例中的相关描述,本实施例此处不再赘述。
可选地,存储器502既可以是独立的,也可以跟处理器501集成在一起。
当存储器502独立设置时,该设备还包括总线503,用于连接所述存储器502和处理器501。
进一步的,基于上述实施例中所描述的内容,本申请实施例中还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有计算机执行指令,当处理器执行所述计算机执行指令时,以实现上述实施例中所描述的函数调用信息的记录方法的各个步骤,具体可以参见前述方法实施例中的相关描述,本实施例此处不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的设备和方法,可以通过其它的方式实现。例如,以上所描述的设备实施例仅仅是示意性的,例如,所述模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个模块可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能模块可以集成在一个处理单元中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个单元中。上述模块成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
上述以软件功能模块的形式实现的集成的模块,可以存储在一个计算机可读取存储介质中。上述软件功能模块存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(英文:processor)执行本申请各个实施例所述方法的部分步骤。
应理解,上述处理器可以是中央处理单元(英文:Central Processing Unit,简称:CPU),还可以是其他通用处理器、数字信号处理器(英文:Digital Signal Processor,简称:DSP)、专用集成电路(英文:Application Specific Integrated Circuit,简称:ASIC)等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合申请所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。
存储器可能包含高速RAM存储器,也可能还包括非易失性存储NVM,例如至少一个磁盘存储器,还可以为U盘、移动硬盘、只读存储器、磁盘或光盘等。
总线可以是工业标准体系结构(Industry Standard Architecture,ISA)总线、外部设备互连(Peripheral Component,PCI)总线或扩展工业标准体系结构(ExtendedIndustry Standard Architecture,EISA)总线等。总线可以分为地址总线、数据总线、控制总线等。为便于表示,本申请附图中的总线并不限定仅有一根总线或一种类型的总线。
上述存储介质可以是由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦除可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或光盘。存储介质可以是通用或专用计算机能够存取的任何可用介质。
一种示例性的存储介质耦合至处理器,从而使处理器能够从该存储介质读取信息,且可向该存储介质写入信息。当然,存储介质也可以是处理器的组成部分。处理器和存储介质可以位于专用集成电路(Application Specific Integrated Circuits,简称:ASIC)中。当然,处理器和存储介质也可以作为分立组件存在于电子设备或主控设备中。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上各实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述各实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围。
Claims (9)
1.一种单元测试中自动插桩的方法,其特征在于,所述方法包括:
查找单元测试工程中的目标函数,所述目标函数包括函数体不在所述单元测试工程中的函数;
获取所述目标函数的函数信息,并根据所述目标函数的函数信息生成与所述目标函数对应的桩函数;
将所述桩函数插入到所述单元测试工程中;
所述根据所述目标函数的函数信息生成与所述目标函数对应的桩函数,包括:
获取预设的函数信息与桩函数之间的对应关系;
根据所述预设的函数信息与桩函数之间的对应关系,确定所述目标函数的函数信息对应的目标桩函数;
将所述目标桩函数确定为所述目标函数对应的桩函数;
所述根据所述预设的函数信息与桩函数之间的对应关系,确定所述目标函数的函数信息对应的目标桩函数,包括:
确定所述单元测试工程的测试结果是否与所述目标函数的运行结果相关;
当所述单元测试工程的测试结果与所述目标函数的运行结果相关时,根据所述预设的函数信息与桩函数之间的对应关系,确定所述目标函数的函数信息对应的目标桩函数,其中,所述目标桩函数的函数信息与所述目标函数的函数信息相同。
2.根据权利要求1所述的方法,其特征在于,所述获取所述目标函数的函数信息,包括:
根据所述目标函数的接口,获取所述目标函数的函数信息;其中,所述目标函数的函数信息包括以下信息中的至少一种:所述目标函数的输入参数、所述目标函数的输出参数、所述目标函数的类型、所述目标函数中参数的类型。
3.根据权利要求2所述的方法,其特征在于,将所述桩函数插入到所述单元测试工程中之后,所述方法还包括:
检测所述目标函数的接口是否发生变化;
当所述目标函数的接口发生变化时,根据所述目标函数变化后的接口,获取所述目标函数变化后的函数信息;
根据所述目标函数变化后的函数信息,更新所述目标函数对应的桩函数。
4.一种单元测试中自动插桩的装置,其特征在于,所述装置包括:
查找模块,用于查找单元测试工程中的目标函数,所述目标函数包括函数体不在所述单元测试工程中的函数;
处理模块,用于获取所述目标函数的函数信息,并根据所述目标函数的函数信息生成与所述目标函数对应的桩函数;
所述处理模块,还用于将所述桩函数插入到所述单元测试工程中;
所述处理模块用于:
获取预设的函数信息与桩函数之间的对应关系;
根据所述预设的函数信息与桩函数之间的对应关系,确定所述目标函数的函数信息对应的目标桩函数;
将所述目标桩函数确定为所述目标函数对应的桩函数;
所述根据所述预设的函数信息与桩函数之间的对应关系,确定所述目标函数的函数信息对应的目标桩函数,包括:
确定所述单元测试工程的测试结果是否与所述目标函数的运行结果相关;
当所述单元测试工程的测试结果与所述目标函数的运行结果相关时,根据所述预设的函数信息与桩函数之间的对应关系,确定所述目标函数的函数信息对应的目标桩函数,其中,所述目标桩函数的函数信息与所述目标函数的函数信息相同。
5.根据权利要求4所述的装置,其特征在于,所述处理模块用于:
根据所述目标函数的接口,获取所述目标函数的函数信息;其中,所述目标函数的函数信息包括以下信息中的至少一种:所述目标函数的输入参数、所述目标函数的输出参数、所述目标函数的类型、所述目标函数中参数的类型。
6.根据权利要求5所述的装置,其特征在于,所述处理模块还用于:
将所述桩函数插入到所述单元测试工程中之后, 检测所述目标函数的接口是否发生变化;
当所述目标函数的接口发生变化时,根据所述目标函数变化后的接口,获取所述目标函数变化后的函数信息;
根据所述目标函数变化后的函数信息,更新所述目标函数对应的桩函数。
7.一种电子设备,其特征在于,包括:至少一个处理器和存储器;
所述存储器存储计算机执行指令;
所述至少一个处理器执行所述存储器存储的计算机执行指令,使得所述至少一个处理器执行如权利要求1至3任一项所述的单元测试中自动插桩的方法。
8.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机执行指令,当处理器执行所述计算机执行指令时,实现如权利要求1至3任一项所述的单元测试中自动插桩的方法。
9.一种计算机程序产品,包括计算机程序,其特征在于,所述计算机程序被处理器执行时,实现权利要求1至3任一项所述的单元测试中自动插桩的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011496852.6A CN112527657B (zh) | 2020-12-17 | 2020-12-17 | 单元测试中自动插桩的方法及设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011496852.6A CN112527657B (zh) | 2020-12-17 | 2020-12-17 | 单元测试中自动插桩的方法及设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112527657A CN112527657A (zh) | 2021-03-19 |
CN112527657B true CN112527657B (zh) | 2022-08-30 |
Family
ID=75001047
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011496852.6A Active CN112527657B (zh) | 2020-12-17 | 2020-12-17 | 单元测试中自动插桩的方法及设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112527657B (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102955740A (zh) * | 2012-12-13 | 2013-03-06 | 中国航空无线电电子研究所 | 一种基于Perl的驱动函数和桩函数生成方法 |
CN105468525A (zh) * | 2015-11-27 | 2016-04-06 | 苏州同元软控信息技术有限公司 | 基于c代码模型的构件接口单元测试方法 |
CN106844219A (zh) * | 2017-02-15 | 2017-06-13 | 腾讯科技(深圳)有限公司 | 应用检测方法及应用检测装置 |
CN111124937A (zh) * | 2020-03-31 | 2020-05-08 | 深圳开源互联网安全技术有限公司 | 基于插桩函数辅助提高生成测试用例效率的方法及系统 |
-
2020
- 2020-12-17 CN CN202011496852.6A patent/CN112527657B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102955740A (zh) * | 2012-12-13 | 2013-03-06 | 中国航空无线电电子研究所 | 一种基于Perl的驱动函数和桩函数生成方法 |
CN105468525A (zh) * | 2015-11-27 | 2016-04-06 | 苏州同元软控信息技术有限公司 | 基于c代码模型的构件接口单元测试方法 |
CN106844219A (zh) * | 2017-02-15 | 2017-06-13 | 腾讯科技(深圳)有限公司 | 应用检测方法及应用检测装置 |
CN111124937A (zh) * | 2020-03-31 | 2020-05-08 | 深圳开源互联网安全技术有限公司 | 基于插桩函数辅助提高生成测试用例效率的方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN112527657A (zh) | 2021-03-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US5202889A (en) | Dynamic process for the generation of biased pseudo-random test patterns for the functional verification of hardware designs | |
CN111124921B (zh) | 内存越界的检测方法、装置、设备和存储介质 | |
CN112328305B (zh) | 一种眼图测试方法、装置、电子设备及可读存储介质 | |
US11461472B2 (en) | Automatic correctness and performance measurement of binary transformation systems | |
CN107272441B (zh) | 用于监控错误的方法和用于监控错误的数据处理装置 | |
US6925522B2 (en) | Device and method capable of changing codes of micro-controller | |
CN113377586A (zh) | 一种服务器自动化检测方法、装置及存储介质 | |
EP3540598A1 (en) | Method, device and server for checking a defective function | |
CN112527657B (zh) | 单元测试中自动插桩的方法及设备 | |
CN110765008A (zh) | 一种数据处理方法及装置 | |
CN116069635A (zh) | Soc系统的测试方法、装置、计算机设备及存储介质 | |
CN114446381A (zh) | eMMC故障分析方法、装置、可读存储介质及电子设备 | |
US7058864B1 (en) | Test for processor memory cache | |
US20100077383A1 (en) | Simulation method and storage medium for storing program | |
CN112631904A (zh) | 函数调用信息的记录方法及设备 | |
CN112885403A (zh) | 一种Flash控制器的功能测试方法、装置及设备 | |
JP2011145880A (ja) | 半導体集積回路の論理検証にて使用するテストタスクの生成方法 | |
CN112084112B (zh) | 热补丁的测试方法、装置和服务器 | |
CN115718685A (zh) | Cpu测试方法、装置、电子设备及存储介质 | |
CN109426506B (zh) | 选用只读存储器的加载方法 | |
CN113407453A (zh) | 数据保护位的验证方法、装置、电子设备及存储介质 | |
CN117472711A (zh) | 图像数据处理流程的跟踪方法、计算设备及存储介质 | |
CN114417763A (zh) | 一种形式验证的方法、系统、设备和存储介质 | |
CN111427731A (zh) | 一种自动化拆分码流及验证码流的测试方法和系统 | |
CN116909823A (zh) | Gpu压力测试方法、装置、电子设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |