CN114036066A - 一种单元测试方法、装置、计算设备及可读存储介质 - Google Patents

一种单元测试方法、装置、计算设备及可读存储介质 Download PDF

Info

Publication number
CN114036066A
CN114036066A CN202111486588.2A CN202111486588A CN114036066A CN 114036066 A CN114036066 A CN 114036066A CN 202111486588 A CN202111486588 A CN 202111486588A CN 114036066 A CN114036066 A CN 114036066A
Authority
CN
China
Prior art keywords
function
address
module
tested
target
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.)
Pending
Application number
CN202111486588.2A
Other languages
English (en)
Inventor
胡建忠
杨浩
王荣
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Uniontech Software Technology Co Ltd
Original Assignee
Uniontech Software Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Uniontech Software Technology Co Ltd filed Critical Uniontech Software Technology Co Ltd
Priority to CN202111486588.2A priority Critical patent/CN114036066A/zh
Publication of CN114036066A publication Critical patent/CN114036066A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3684Test management for test design, e.g. generating new test cases
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites

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

一种单元测试方法、装置、计算设备及可读存储介质
技术领域
本发明涉及计算机领域,尤其涉及一种单元测试方法、装置、计算设备及可读存储介质。
背景技术
软件开发过程中,需要对其各个模块进行单元测试以来确保软件的质量。其中,一些模块的单元测试需要测试机与外设设备进行交互来完成。然而,很多情况下,测试机是无法连接外设设备的。显然这样,对于需要借助外设设备才能进行验证的模块便无法进行测试。
为此,亟需一种新的测试方法来解决上述技术问题。
发明内容
为此,本发明提供了一种单元测试方法、装置、计算设备及可读存储介质,以力图解决或者至少缓解上面存在的问题。
根据本发明的一个方面,提供一种单元测试方法,在计算设备中执行,计算设备中存储有第一函数与第二函数的关联关系,第一函数为待测模块中需外设设备运行的函数,第二函数用于模拟第一函数的执行结果,并将执行结果返回至其对应的第一函数所在地址的下一地址处,该方法包括:在对待测模块执行测试的初始化阶段,确定需要被替换的目标函数,目标函数为其运行所需的外设设备未被计算设备当前所连接的第一函数;基于关联关系确定与目标函数相对应的第二函数,并获取目标函数的第一地址和对应的第二函数的第二地址;在第一地址处构建用于跳转至第二地址处的跳转语句;以及对目标函数被替换后的待测模块执行测试。
可选地,在根据本发明的单元测试方法中,确定需要被替换的目标函数的步骤,包括:读取第一函数运行所需的外设设备以及计算设备当前所连接的外设设备;将其运行所需的外设设备未被计算设备当前所连接的第一函数,确定为目标函数。
可选地,在根据本发明的单元测试方法中,获取目标函数的第一地址和对应的第二函数的第二地址的步骤,包括:获取目标函数的函数类型;根据函数类型的取址语句,获取第一地址和第二地址。
可选地,在根据本发明的单元测试方法中,在第一地址处构建用于跳转至第二地址处的跳转语句的步骤,包括:获取待测模块所运行的平台类型;根据平台类型的跳转指令,构建跳转语句。
可选地,在根据本发明的单元测试方法中,平台类型包括X86平台、ARM平台和MIPS平台。
可选地,在根据本发明的单元测试方法中,在获取待测模块所运行的平台类型的步骤中,通过处理器架构获取工具获取待测模块所运行的平台类型。
可选地,在根据本发明的单元测试方法中,第一函数运行所需的外设设备包括光盘、U盘和外接硬盘。
根据本发明的又一个方面,提供一种单元测试装置,驻留在计算设备中,计算设备中存储有第一函数与第二函数的关联关系,第一函数为待测模块中需外设设备运行的函数,第二函数用于模拟第一函数的执行结果,并将执行结果返回至其对应的第一函数所在地址的下一地址处,该装置包括:确定单元,适于在对待测模块执行测试的初始化阶段,确定需要被替换的目标函数,目标函数为其运行所需的外设设备未被计算设备当前所连接的第一函数;获取单元,适于基于关联关系确定与目标函数相对应的第二函数,并获取目标函数的第一地址和对应的第二函数的第二地址;构建单元,适于在第一地址处构建用于跳转至第二地址处的跳转语句;以及测试单元,适于对目标函数被替换后的待测模块执行测试。
根据本发明的又一个方面,提供一种计算设备,包括:至少一个处理器;以及存储器,存储有程序指令,其中,程序指令被配置为适于由至少一个处理器执行,程序指令包括用于执行根据本发明的单元测试方法的指令。
根据本发明的又一个方面,提供一种存储有程序指令的可读存储介质,当程序指令被计算设备读取并执行时,使得计算设备执行根据本发明的单元测试方法。
根据本发明的单元测试方法,在对待测模块执行测试的初始化阶段,首先确定第一函数中需要被替换的目标函数。然后,基于第一函数和第二函数的关联关系确定与目标函数相对应的第二函数,并获取目标函数的第一地址和对应的第二函数的第二地址。接着,在第一地址处构建用于跳转至第二地址处的跳转语句。最后,对目标函数被替换后的待测模块执行测试。
可见,在对待测模块进行测试时,对于运行所需的外设设备不具备的函数,本发明能够模拟其执行结果并将其返回至相应地址处,从而使得待测模块的测试能够得以进行。因此,在单元测试中,即使存在运行所需的外设设备不具备的函数,本发明也能通过模拟其执行结果来使单元测试顺利进行,方便快捷。并且,本发明的单元测试方法可以在不同的平台上使用,而且对于所模拟的函数的类型没有任何限制,进一步地提高了其便捷性。
附图说明
为了实现上述以及相关目的,本文结合下面的描述和附图来描述某些说明性方面,这些方面指示了可以实践本文所公开的原理的各种方式,并且所有方面及其等效方面旨在落入所要求保护的主题的范围内。通过结合附图阅读下面的详细描述,本公开的上述以及其它目的、特征和优势将变得更加明显。遍及本公开,相同的附图标记通常指代相同的部件或元素。
图1示出了根据本发明一个实施例的计算设备100的结构框图;
图2示出了根据本发明一个实施例的单元测试方法200的流程图;
图3示出了根据本发明一个实施例的入栈指令和出栈指令的示意图;
图4示出了根据本发明一个实施例的对目标函数被替换后的待测模块执行测试的示意图;
图5示出了根据本发明一个实施例的单元测试装置500的结构框图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
一些模块的单元测试需要测试机与外设设备进行交互来完成,而很多情况下测试机是无法连接外设设备的,为此提出可以采用gmock工具来对这些模块进行测试。然而,gmock依赖C++多态机制进行工作,要想在代码中使用gmock类的设计,必须采用接口隔离,而C++本身是没有接口类型的,因此对于C++来说只能采用纯虚类型。也就是说,gmock必须依赖C++的多态机制来实现,并且非虚函数不能被mock,只有虚函数才能被mock,。另外,gmock是用来配合google test对C++项目做单元测试的,因此它依赖于googletest。
基于此,本发明提出了一种单元测试方法。本发明的单元测试方法可以在计算设备中执行。图1示出了根据本发明一个实施例的计算设备100的结构框图。需要说明的是,图1所示的计算设备100仅为一个示例,在实践中,用于实施本发明的单元测试方法的计算设备可以是任意型号的设备,其硬件配置情况可以与图1所示的计算设备100相同,也可以与图1所示的计算设备100不同。实践中用于实施本发明的单元测试方法的计算设备可以对图1所示的计算设备100的硬件组件进行增加或删减,本发明对计算设备的具体硬件配置情况不做限制。
如图1所示,在基本配置102中,计算设备100典型地包括系统存储器106和一个或者多个处理器104。存储器总线108可以用于在处理器104和系统存储器106之间的通信。
取决于期望的配置,处理器104可以是任何类型的处理,包括但不限于:微处理器(μP)、微控制器(μC)、数字信息处理器(DSP)或者它们的任何组合。处理器104可以包括诸如一级高速缓存110和二级高速缓存112之类的一个或者多个级别的高速缓存、处理器核心114和寄存器116。示例的处理器核心114可以包括运算逻辑单元(ALU)、浮点数单元(FPU)、数字信号处理核心(DSP核心)或者它们的任何组合。示例的存储器控制器118可以与处理器104一起使用,或者在一些实现中,存储器控制器118可以是处理器104的一个内部部分。
取决于期望的配置,系统存储器106可以是任意类型的存储器,包括但不限于:易失性存储器(诸如RAM)、非易失性存储器(诸如ROM、闪存等)或者它们的任何组合。计算设备中的物理内存通常指的是易失性存储器RAM,磁盘中的数据需要加载至物理内存中才能够被处理器104读取。系统存储器106可以包括操作系统120、一个或者多个应用122以及程序数据124。在一些实施方式中,应用122可以布置为在操作系统上由一个或多个处理器104利用程序数据124执行指令。操作系统120例如可以是Linux、Windows等,其包括用于处理基本系统服务以及执行依赖于硬件的任务的程序指令。应用122包括用于实现各种用户期望的功能的程序指令,应用122例如可以是浏览器、即时通讯软件、软件开发工具(例如集成开发环境IDE、编译器等)等,但不限于此。当应用122被安装到计算设备100中时,可以向操作系统120添加驱动模块。
在计算设备100启动运行时,处理器104会从系统存储器106中读取操作系统120的程序指令并执行。应用122运行在操作系统120之上,利用操作系统120以及底层硬件提供的接口来实现各种用户期望的功能。当用户启动应用122时,应用122会加载至系统存储器106中,处理器104从系统存储器106中读取并执行应用122的程序指令。
计算设备100还包括储存设备132,储存设备132包括可移除储存器136和不可移除储存器138,可移除储存器136和不可移除储存器138均与储存接口总线134连接。
计算设备100还可以包括有助于从各种接口设备(例如,输出设备142、外设接口144和通信设备146)到基本配置102经由总线/接口控制器130的通信的接口总线140。示例的输出设备142包括图形处理单元148和音频处理单元150。它们可以被配置为有助于经由一个或者多个A/V端口152与诸如显示器或者扬声器之类的各种外部设备进行通信。示例外设接口144可以包括串行接口控制器154和并行接口控制器156,它们可以被配置为有助于经由一个或者多个I/O端口158和诸如输入设备(例如,键盘、鼠标、笔、语音输入设备、触摸输入设备)或者其他外设(例如打印机、扫描仪等)之类的外部设备进行通信。示例的通信设备146可以包括网络控制器160,其可以被布置为便于经由一个或者多个通信端口164与一个或者多个其他计算设备162通过网络通信链路的通信。
网络通信链路可以是通信介质的一个示例。通信介质通常可以体现为在诸如载波或者其他传输机制之类的调制数据信号中的计算机可读指令、数据结构、程序模块,并且可以包括任何信息递送介质。“调制数据信号”可以这样的信号,它的数据集中的一个或者多个或者它的改变可以在信号中编码信息的方式进行。作为非限制性的示例,通信介质可以包括诸如有线网络或者专线网络之类的有线介质,以及诸如声音、射频(RF)、微波、红外(IR)或者其它无线介质在内的各种无线介质。这里使用的术语计算机可读介质可以包括存储介质和通信介质二者。
在根据本发明的计算设备100中,应用122包括用于执行本发明的单元测试方法200的指令,该指令可以指示处理器104执行本发明的单元测试方法。本领域技术人员可以理解,除了用于执行单元测试方法200的指令之外,应用122还可以包括用于实现其他功能的其他应用126。
图2示出了根据本发明一个实施例的单元测试方法200的流程图,方法200适于在计算设备(例如图1所示的计算设备100)中执行。该计算设备中存储有第一函数与第二函数的关联关系。
其中,第一函数为待测模块中需外设设备运行的函数。即,第一函数为待测模块中需要借助外设设备来运行的函数。根据本发明的一个实施例,第一函数运行所需借助的外设设备可以包括光盘、U盘以及外接硬盘。当然,第一函数运行所需的外设设备还可以为其他的一些设备,例如外界显示器等。对于第一函数运行所需的外设设备,本发明不作具体限定。另外,本发明对第一函数也不作限制,其可以为C++的构造函数、析构函数、虚函数等。
第二函数则用于模拟第一函数的执行结果(此处特指正确结果),并将执行结果返回至其对应的第一函数所在地址的下一地址处。也就是说,每一个第一函数对应一个用于模拟其执行结果的第二函数,因此第一函数与第二函数的关联关系记录的是各个第一函数与各个第二函数的对应关系。需要说明的是,计算设备在存储第一函数与第二函数的关联关系的同时还会将每一个第一函数所关联的第二函数进行存储。
如图2所示,本发明的单元测试方法200始于步骤S210。在步骤S210中,在对待测模块执行测试的初始化阶段,确定需要被替换的目标函数。其中,在对待测模块执行测试时需要先对待测试模块进行预加载,而这里的初始化阶段则是指,对待测试模块执行测试之前对其进行预加载的阶段。
根据本发明的一个实施例,可以通过如下方式来确定需要被替换的目标函数。首先,读取第一函数运行所需的外设设备以及计算设备当前所连接的外设设备。然后,将其运行所需的外设设备未被计算设备当前所连接的第一函数,确定为目标函数。即,目标函数为其运行所需的外设设备未被计算设备当前所连接的第一函数。
具体而言,在对待测模块进行预加载时,首先读取待测模块中各个第一函数(即需要借助外设设备运行的函数)所需的外设设备以及计算设备当前所连接的外设设备。然后,将各个第一函数所需的外设设备与计算设备当前所连接的外设设备进行比对。最后,将所有第一函数中其所需的外设设备未被当前计算设备所连接的第一函数,作为目标函数。即,得到了需要替换的各个目标函数。
随后,进入步骤S220,基于关联关系确定与目标函数相对应的第二函数,并获取目标函数的第一地址和对应的第二函数的第二地址。上述已指出第一函数与第二函数的关联关系中记录的是各个第一函数与各个第二函数的对应关系,因此根据该关联关系以及确定的各个目标函数,则能得到与各个目标函数相对应的第二函数。
针对每个目标函数以及与其相对应的第二函数,可以通过如下方式来获取该目标函数的第一地址以及与该目标函数相对应的第二函数的第二地址。首先,获取目标函数的函数类型。其中,目标函数的函数类型可以包括全局函数和类的成员函数,但不局限于此。另外,关于目标函数的类型,可以基于目标函数的定义来获取,具体地,可以基于目标函数的定义中的函数头来获取。当然这仅是一种示例,还可以采用其他的方式。具体如何获取目标函数的类型属于现有技术,在此不再详细阐述。
然后,根据函数类型的取址语句,获取第一地址和第二地址。其中,获取不同类型的函数的地址所使用的取址语句是不同的,因此在获取目标函数的第一地址以及与该目标函数相对应的第二函数的第二地址时,需采用目标函数所属的函数类型的取址语句(目标函数所对应的第二函数与目标函数的类型相同)。
其中,当目标函数的函数类型为全局函数时,则采用全局函数的取址语句来获取目标函数的第一地址以及与该目标函数相对应的第二函数的第二地址。当目标函数的函数类型为类的成员函数时,则采用类的成员函数的取址语句来获取目标函数的第一地址以及与该目标函数相对应的第二函数的第二地址。其中,全局函数的取址语句为取地址符“&”+函数名。类的成员函数的取址语句为取地址符“&”+类::成员函数名。
在获取到各个目标函数的第一地址以及与该目标函数相对应的第二函数的第二地址后,进入步骤S230,在第一地址处构建用于跳转至第二地址处的跳转语句。即,针对于每个目标函数,在目标函数的第一地址处构建用于跳转至与该目标函数相对应的第二函数的第二地址处的跳转语句。
具体地,首先,获取待测模块所运行的平台类型。其中,可以通过处理器架构获取工具来获取待测模块所运行的平台类型。进一步地,处理器架构获取工具可以为uname-r。另外,待测模块所运行的平台类型可以包括X86平台、ARM平台和MIPS平台,但不局限于此。
然后,根据平台类型的跳转指令,构建跳转语句。其中,不同的平台使用的跳转指令不同,因此在目标函数的第一地址处构建用于跳转至与该目标函数相对应的第二函数的第二地址处的跳转语句时,需采用待测模块所运行的平台类型的跳转指令。
其中,当待测模块所运行的平台类型为X86平台时,则使用第一跳转指令jmp,在目标函数的第一地址处构建用于跳转至与该目标函数相对应的第二函数的第二地址处的跳转语句,例如jmp fun_stub。当待测模块所运行的平台类型为ARM平台时,则使用第二跳转指令ldr和第三跳转指令br,在目标函数的第一地址处构建用于跳转至与该目标函数相对应的第二函数的第二地址处的跳转语句,例如ldr x9,+8;br x9。而当待测模块所运行的平台类型为MIPS平台时,则使用第四跳转指令jalr以及入栈指令和出栈指令,在目标函数的第一地址处构建用于跳转至与该目标函数相对应的第二函数的第二地址处的跳转语句,例如入栈指令;jalr t9;出栈指令,其中,具体的入栈指令和出栈指令可参见图3。
需要说明的是,在各个目标函数的第一地址处构建的用于跳转至与该目标函数相对应的第二函数的第二地址处的跳转语句必须是汇编编译以后的机器码,不能是汇编指令,以避免打乱执行流程。
至此,便在各个目标函数的第一地址处构建了用于跳转至与该目标函数相对应的第二函数的第二地址处的跳转语句。这样,当在待测模块的执行期间运行到各个目标函数时,便会跳转到其所对应的第二函数的地址处,而第二函数用于模拟其所对应的目标函数的执行结果并将其执行结果返回至其所对应的目标函数所在地址的下一地址处。因此,至此便完成了对待测模块中的目标函数的替换。
随后进入步骤S240,对目标函数被替换后的待测模块执行测试。由于各个目标函数已被用于模拟其执行结果的第二函数替换,因此在对目标函数被替换后的待测模块执行测试时,每执行到各个目标函数,则会跳转到与其所对应的第二函数的地址处去执行,并在执行完后返回该目标函数所在地址的下一地址处,如图4。显然这样,便可完成对待测模块的测试。
本发明还提供了一种单元测试装置。图5示出了根据本发明一个实施例的单元测试装置500的结构框图,适于驻留在计算设备100中。计算设备100中存储有第一函数与第二函数的关联关系。其中,第一函数为待测模块中需外设设备运行的函数,第二函数用于模拟第一函数的执行结果,并将执行结果返回至其对应的第一函数所在地址的下一地址处。如图5所示,该单元测试装置500包括确定单元510、获取单元520、构建单元530以及测试单元540。
确定单元510,适于在对待测模块执行测试的初始化阶段,确定需要被替换的目标函数,目标函数为其运行所需的外设设备未被计算设备当前所连接的第一函数。
获取单元520,适于基于关联关系确定与目标函数相对应的第二函数,并获取目标函数的第一地址和对应的第二函数的第二地址。
构建单元530,适于在第一地址处构建用于跳转至第二地址处的跳转语句。
测试单元540,适于对目标函数被替换后的待测模块执行测试。
根据本发明的单元测试装置500,其具体细节已在基于图1至图4的描述中详细公开,在此不再赘述。
根据本发明的单元测试方法,在对待测模块执行测试的初始化阶段,首先确定第一函数中需要被替换的目标函数。然后,基于第一函数和第二函数的关联关系确定与目标函数相对应的第二函数,并获取目标函数的第一地址和对应的第二函数的第二地址。接着,在第一地址处构建用于跳转至第二地址处的跳转语句。最后,对目标函数被替换后的待测模块执行测试。
可见,在对待测模块进行测试时,对于运行所需的外设设备当前不具备的函数,本发明能够模拟其执行结果并将其返回至相应地址处,从而使得待测模块的测试能够得以进行。因此,在单元测试中,即使存在运行所需的外设设备当前不具备的函数,本发明也能通过模拟其执行结果来使单元测试顺利进行,方便快捷,同时还提高了单元的测试效率。另外,本发明的单元测试方法可以在不同的平台上使用,并且对于所模拟的函数的类型没有任何限制,进一步地提高了其便捷性。
这里描述的各种技术可结合硬件或软件,或者它们的组合一起实现。从而,本发明的方法和设备,或者本发明的方法和设备的某些方面或部分可采取嵌入有形媒介,例如可移动硬盘、U盘、软盘、CD-ROM或者其它任意机器可读的存储介质中的程序代码(即指令)的形式,其中当程序被载入诸如计算机之类的机器,并被所述机器执行时,所述机器变成实践本发明的设备。
在程序代码在可编程计算机上执行的情况下,计算设备一般包括处理器、处理器可读的存储介质(包括易失性和非易失性存储器和/或存储元件),至少一个输入装置,和至少一个输出装置。其中,存储器被配置用于存储程序代码;处理器被配置用于根据该存储器中存储的所述程序代码中的指令,执行本发明的单元测试方法。
以示例而非限制的方式,可读介质包括可读存储介质和通信介质。可读存储介质存储诸如计算机可读指令、数据结构、程序模块或其它数据等信息。通信介质一般以诸如载波或其它传输机制等已调制数据信号来体现计算机可读指令、数据结构、程序模块或其它数据,并且包括任何信息传递介质。以上的任一种的组合也包括在可读介质的范围之内。
在此处所提供的说明书中,算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与本发明的示例一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下被实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多特征。
本领域那些技术人员应当理解在本文所公开的示例中的设备的模块或单元或组件可以布置在如该实施例中所描述的设备中,或者可替换地可以定位在与该示例中的设备不同的一个或多个设备中。前述示例中的模块可以组合为一个模块或者此外可以分成多个子模块。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。
此外,所述实施例中的一些在此被描述成可以由计算机系统的处理器或者由执行所述功能的其它装置实施的方法或方法元素的组合。因此,具有用于实施所述方法或方法元素的必要指令的处理器形成用于实施该方法或方法元素的装置。此外,装置实施例的在此所述的元素是如下装置的例子:该装置用于实施由为了实施该发明的目的的元素所执行的功能。
如在此所使用的那样,除非另行规定,使用序数词“第一”、“第二”、“第三”等等来描述普通对象仅仅表示涉及类似对象的不同实例,并且并不意图暗示这样被描述的对象必须具有时间上、空间上、排序方面或者以任意其它方式的给定顺序。
尽管根据有限数量的实施例描述了本发明,但是受益于上面的描述,本技术领域内的技术人员明白,在由此描述的本发明的范围内,可以设想其它实施例。此外,应当注意,本说明书中使用的语言主要是为了可读性和教导的目的而选择的,而不是为了解释或者限定本发明的主题而选择的。因此,在不偏离所附权利要求书的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。对于本发明的范围,对本发明所做的公开是说明性的,而非限制性的,本发明的范围由所附权利要求书限定。

Claims (10)

1.一种单元测试方法,适于在计算设备中执行,所述计算设备中存储有第一函数与第二函数的关联关系,所述第一函数为待测模块中需外设设备运行的函数,所述第二函数用于模拟所述第一函数的执行结果,并将所述执行结果返回至其对应的第一函数所在地址的下一地址处,所述方法包括:
在对待测模块执行测试的初始化阶段,确定需要被替换的目标函数,所述目标函数为其运行所需的外设设备未被所述计算设备当前所连接的第一函数;
基于所述关联关系确定与所述目函数相对应的第二函数,并获取所述目标函数的第一地址和对应的第二函数的第二地址;
在第一地址处构建用于跳转至第二地址处的跳转语句;以及
对目标函数被替换后的待测模块执行测试。
2.如权利要求1所述的方法,其中,确定需要被替换的目标函数的步骤,包括:
读取所述第一函数运行所需的外设设备以及所述计算设备当前所连接的外设设备;
将其运行所需的外设设备未被所述计算设备当前所连接的第一函数,确定为目标函数。
3.如权利要求1或2所述的方法,其中,获取所述目标函数的第一地址和对应的第二函数的第二地址的步骤,包括:
获取所述目标函数的函数类型;
根据所述函数类型的取址语句,获取所述第一地址和第二地址。
4.如权利要求1-3中任一项所述的方法,其中,所述在第一地址处构建用于跳转至第二地址处的跳转语句的步骤,包括:
获取所述待测模块所运行的平台类型;
根据所述平台类型的跳转指令,构建所述跳转语句。
5.如权利要求4所述的方法,其中,所述平台类型包括X86平台、ARM平台和MIPS平台。
6.如权利要求4或5所述的方法,其中,在所述获取所述待测模块所运行的平台类型的步骤中,通过处理器架构获取工具获取所述待测模块所运行的平台类型。
7.如权利要求1-6中任一项所述的方法,其中,所述第一函数运行所需的外设设备包括光盘、U盘和外接硬盘。
8.一种单元测试装置,驻留在计算设备中,所述计算设备中存储有第一函数与第二函数的关联关系,所述第一函数为待测模块中需外设设备运行的函数,所述第二函数用于模拟所述第一函数的执行结果,并将所述执行结果返回至其对应的第一函数所在地址的下一地址处,所述装置包括:
确定单元,适于在对待测模块执行测试的初始化阶段,确定需要被替换的目标函数,所述目标函数为其运行所需的外设设备未被所述计算设备当前所连接的第一函数;
获取单元,适于基于所述关联关系确定与所述目标函数相对应的第二函数,并获取所述目标函数的第一地址和对应的第二函数的第二地址;
构建单元,适于在第一地址处构建用于跳转至第二地址处的跳转语句;以及
测试单元,适于对目标函数被替换后的待测模块执行测试。
9.一种计算设备,包括:
至少一个处理器;以及
存储器,存储有程序指令,其中,所述程序指令被配置为适于由所述至少一个处理器执行,所述程序指令包括用于执行如权利要求1-7中任一项所述方法的指令。
10.一种存储有程序指令的可读存储介质,当所述程序指令被计算设备读取并执行时,使得所述计算设备执行如权利要求1-7中任一项所述方法。
CN202111486588.2A 2021-12-07 2021-12-07 一种单元测试方法、装置、计算设备及可读存储介质 Pending CN114036066A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111486588.2A CN114036066A (zh) 2021-12-07 2021-12-07 一种单元测试方法、装置、计算设备及可读存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111486588.2A CN114036066A (zh) 2021-12-07 2021-12-07 一种单元测试方法、装置、计算设备及可读存储介质

Publications (1)

Publication Number Publication Date
CN114036066A true CN114036066A (zh) 2022-02-11

Family

ID=80146398

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111486588.2A Pending CN114036066A (zh) 2021-12-07 2021-12-07 一种单元测试方法、装置、计算设备及可读存储介质

Country Status (1)

Country Link
CN (1) CN114036066A (zh)

Similar Documents

Publication Publication Date Title
CN111290952B (zh) 一种动态链接库函数的跟踪方法及装置
CN114924810B (zh) 一种异构程序执行方法、装置、计算设备及可读存储介质
CN114691240A (zh) 驱动硬件配置信息加载方法、装置和系统,以及计算设备
CN111831564A (zh) 一种回归测试方法、装置及计算设备
CN113553124A (zh) 一种应用程序的运行方法、计算设备及存储介质
CN114185551A (zh) 小程序的编译方法、小程序的运行方法及装置、存储介质
CN112631915B (zh) 一种pcie设备软件仿真的方法、系统、设备及介质
MX2011001796A (es) Ejecucion de procesador simulado utilizando supeditar ramificacion.
US8165864B2 (en) Method, system and computer program product for verifying address generation, interlocks and bypasses
CN113204385A (zh) 一种插件加载方法、装置、计算设备及可读存储介质
CN114428642B (zh) 一种基于新型处理器架构的随机指令生成环境
CN114036066A (zh) 一种单元测试方法、装置、计算设备及可读存储介质
CN112860267B (zh) 一种内核裁剪方法及计算设备
CN115576711A (zh) 一种返回数据模拟方法、系统及计算设备
CN112380133B (zh) 一种指令集模拟器利用功能库仿真的方法及装置
CN115374017A (zh) 一种仿真运行可执行文件时抓取现场的方法及计算设备
CN110709823A (zh) 使用jit编译器并绕过所选择目标代码块的转译的目标系统的仿真
CN113238760B (zh) 一种软件迁移方法、装置、计算设备及可读存储介质
CN114328273B (zh) 一种应用程序控件的调试方法、调试装置及计算设备
CN112380092B (zh) 一种应用程序启动时间测试方法
CN114168153B (zh) 一种编译方法、计算设备及存储介质
CN116501378B (zh) 一种逆向工程还原源代码的实现方法、装置和电子设备
US20040098708A1 (en) Simulator for software development and recording medium having simulation program recorded therein
CN114168143A (zh) 软件中源码的定位方法、装置、计算设备及可读存储介质
JP3324542B2 (ja) 仮想マシン

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