CN115757126A - 单元测试方法、装置及电子设备 - Google Patents
单元测试方法、装置及电子设备 Download PDFInfo
- Publication number
- CN115757126A CN115757126A CN202211435694.2A CN202211435694A CN115757126A CN 115757126 A CN115757126 A CN 115757126A CN 202211435694 A CN202211435694 A CN 202211435694A CN 115757126 A CN115757126 A CN 115757126A
- Authority
- CN
- China
- Prior art keywords
- source code
- file
- name
- target source
- 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.)
- Pending
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种单元测试方法、装置及电子设备。其中,上述方法包括:获取并加载当前项目下的目标源代码文件;对每个所述目标源代码文件进行解析,并获取每个所述目标源代码文件中的类名称、方法名称和方法参数;根据当前目标源代码文件包含的类名称、方法名称和方法参数,生成所述当前目标源代码文件对应的单元测试文件;根据所述单元测试文件对所述当前项目进行单元测试。本发明解决了相关技术中单元测试的效率较低的技术问题。
Description
技术领域
本发明涉及代码测试技术领域,具体而言,涉及一种单元测试方法、装置及电子设备。
背景技术
单元测试是集中对源代码实现的每一个程序单元进行测试,检测各个程序单元是否正确地实现了规定的功能,以及检查各程序模块的返回值是否正确。相关技术中单元测试代码的编写一般是通过人工来编写,一般编写单元测试方法经过新建单元测试类,编写单元测试方法,编写单元测试方法内容,调试等步骤。然而手动编写不仅繁琐,且浪费人力物力。现有的一些单元测试生成器等测试工具仅仅可以生成单个类的单元测试方法,且配置较复杂,使得单元测试的效率较低。
发明内容
本发明实施例提供了一种单元测试方法、装置及电子设备,以至少解决相关技术中单元测试的效率较低的技术问题。
根据本发明实施例的一个方面,提供了一种单元测试方法,包括:获取并加载当前项目下的目标源代码文件;对每个所述目标源代码文件进行解析,并获取每个所述目标源代码文件中的类名称、方法名称和方法参数;根据当前目标源代码文件包含的类名称、方法名称和方法参数,生成所述当前目标源代码文件对应的单元测试文件;根据所述单元测试文件对所述当前项目进行单元测试。
根据本发明实施例的另一方面,还提供了一种单元测试装置,包括:获取单元,用于获取并加载当前项目下的目标源代码文件;解析单元,用于对每个所述目标源代码文件进行解析,并获取每个所述目标源代码文件中的类名称、方法名称和方法参数;生成单元,用于根据当前目标源代码文件包含的类名称、方法名称和方法参数,生成所述当前目标源代码文件对应的单元测试文件;测试单元,用于根据所述单元测试文件对所述当前项目进行单元测试。
根据本发明实施例的又一方面,还提供了一种电子设备,包括存储器和处理器,上述存储器中存储有计算机程序,上述处理器被设置为通过上述计算机程序执行上述的单元测试方法。
根据本发明实施例的又一方面,还提供了一种计算机可读的存储介质,该计算机可读的存储介质中存储有计算机程序,其中,该计算机程序被设置为运行时执行上述单元测试方法。
在本发明实施例中,采用了获取并加载当前项目下的目标源代码文件;对每个所述目标源代码文件进行解析,并获取每个所述目标源代码文件中的类名称、方法名称和方法参数;根据当前目标源代码文件包含的类名称、方法名称和方法参数,生成所述当前目标源代码文件对应的单元测试文件;根据所述单元测试文件对所述当前项目进行单元测试的方法,在上述方法中通过对目标源代码文件进行解析,根据当前目标源代码文件包含的类名称、方法名称和方法参数,生成所述当前目标源代码文件对应的单元测试文件,可以避免人工编写代码产生的错误,提升了单元测试效率,减小了单元测试成本,进而解决了相关技术中单元测试的效率较低的技术问题。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是根据本发明实施例的一种可选的单元测试方法的应用环境的示意图;
图2是根据本发明实施例的另一种可选的单元测试方法的应用环境的示意图;
图3是根据本发明实施例的一种可选的单元测试方法的流程示意图;
图4是根据相关技术中的一种可选的单元测试方法的流程示意图;
图5是根据本发明实施例的一种可选的单元测试装置的结构示意图;
图6是根据本发明实施例的一种可选的电子设备的结构示意图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
根据本发明实施例的一个方面,提供了一种单元测试方法,可选地,作为一种可选地实施方式,上述单元测试方法可以但不限于应用于如图1所示的应用环境中。该应用环境中包括:与用户进行人机交互的终端设备102、网络104、服务器106。用户108与终端设备102之间可以进行人机交互,终端设备102中运行有单元测试应用程序。上述终端设备102中包括人机交互屏幕1022,处理器1024及存储器1026。人机交互屏幕1022用于显示当前项目下的目标源代码文件;处理器1024用于获取当前项目下的目标源代码文件和单元测试文件。存储器1026用于存储当前项目下的目标源代码文件和单元测试文件。
此外,服务器106中包括数据库1062及处理引擎1064,数据库1062中用于存储当前项目下的目标源代码文件和单元测试文件。处理引擎1064用于获取并加载当前项目下的目标源代码文件;对每个所述目标源代码文件进行解析,并获取每个所述目标源代码文件中的类名称、方法名称和方法参数;根据当前目标源代码文件包含的类名称、方法名称和方法参数,生成所述当前目标源代码文件对应的单元测试文件;根据所述单元测试文件对所述当前项目进行单元测试;在上述终端设备102的客户端显示当前项目的单元测试结果。
在一个或多个实施例中,本申请上述单元测试方法可以应用于图2所示的应用环境中。如图2所示,用户202与用户设备204之间可以进行人机交互。用户设备204中包含有存储器206和处理器208。本实施例中用户设备204可以但不限于参考执行上述终端设备102所执行的操作,获取当前项目的单元测试结果。
可选地,上述终端设备102和用户设备204包括但不限于为手机、机顶盒、电视、平板电脑、笔记本电脑、PC机,车载电子设备,可穿戴设备等终端,上述网络104可以包括但不限于无线网络或有线网络。其中,该无线网络包括:WIFI及其他实现无线通信的网络。上述有线网络可以包括但不限于:广域网、城域网、局域网。上述服务器106可以包括但不限于任何可以进行计算的硬件设备。上述服务器可以是单一服务器,也可以是由多个服务器组成的服务器集群,或者是云服务器。上述仅是一种示例,本实施例中对此不作任何限定。
相关技术中开发人员要为代码中的方法编写单元测试内容。且开发人员要重复的为所有的类中的方法编写单元测试,如果类和方法很多需要逐一进行编写。然而人工编写的代码往往容易出现错误,比如语法错误,逻辑错误等。
为了解决上述技术问题,作为一种可选地实施方式,如图3所示,本发明实施例提供了一种单元测试方法,包括如下步骤:
S302,获取并加载当前项目下的目标源代码文件。
具体地,在本发明实施例中,例如,当前项目为利用java编程语言进行开发的项目。扫描当前项目下的所有代码文件,这里目标源代码文件仅包含以.java后缀结尾的名字的代码文件,最后可以获取包括.java后缀结尾的代码文件路径列表;扫描的过程可采用遍历的方法,遍历的过程中可以使用深度遍历算法或者广度遍历算法来遍历项目源码目录,当读取到某个以.java后缀结尾的代码文件的时候,则开始使用java的File类型和IO流来进行加载当前遍历到的java源码文件,如代码:new FileInputStream(new File(“java的文件名字”),然后加载该java源码文件。
S304,对每个所述目标源代码文件进行解析,并获取每个所述目标源代码文件中的类名称、方法名称和方法参数。
具体地,例如对每个所述目标源代码文件中的字符串进行遍历,通过正则表达式来获取每个所述目标源代码文件中的类名称、方法名称和方法参数。
S306,根据当前目标源代码文件包含的类名称、方法名称和方法参数,生成所述当前目标源代码文件对应的单元测试文件。
具体地,例如,通过反射工具获取目标源代码的类信息,然后动态生成与当前类型匹配的单元测试类文件,然后对待测试方法的方法元信息进行计算,对待测试方法的调用对象生成策略计算,对待测试方法进行调用参数计算等,然后根据上述计算结果动态生成方法体与方法内容,然后将方法体与方法内容与目标源代码文件中的类名称、方法名称和方法参数进行组合,得到当前目标源代码文件对应的单元测试文件。
S308,根据所述单元测试文件对所述当前项目进行单元测试。
在本发明实施例中,采用了获取并加载当前项目下的目标源代码文件;对每个所述目标源代码文件进行解析,并获取每个所述目标源代码文件中的类名称、方法名称和方法参数;根据当前目标源代码文件包含的类名称、方法名称和方法参数,生成所述当前目标源代码文件对应的单元测试文件;根据所述单元测试文件对所述当前项目进行单元测试的方法,在上述方法中通过对目标源代码文件进行解析,根据当前目标源代码文件包含的类名称、方法名称和方法参数,生成所述当前目标源代码文件对应的单元测试文件,可以避免人工编写代码产生的错误,提升了单元测试效率,减小了单元测试成本,进而解决了相关技术中单元测试的效率较低的技术问题。
在一个或多个实施例中,所述获取并加载当前项目下的所有源代码文件,包括:
遍历当前项目下的所有代码文件的路径列表,根据所述路径列表确定包括预设后缀名的源代码文件,并将包括所述预设后缀名的源代码文件作为目标源代码文件;加载当前遍历到所述目标源代码文件。
具体地,例如这里的后缀名为.java,利用深度遍历算法遍历当前项目下的所有代码文件的路径列表,根据所述路径列表确定包括.java的源代码文件,并将包括.java后缀名的源代码文件作为目标源代码文件。
在一个或多个实施例中,所述对每个所述目标源代码文件进行解析,并获取每个所述目标源代码文件中的类名称、方法名称和方法参数,包括:
遍历目标源代码中的每个字符,执行如下操作:
根据预设匹配规则,将第一关键词和第一符号之间去除空格字符后的字符串确定为类名称。
具体地,例如第一关键词为class,第一符号为“{”,遍历到目标源代码中出现的字符串public class add{,此时可以确定类名称为add。
根据所述预设匹配规则,在包括第二关键词且不包含所述第一关键词的代码行中,将空格字符和第二字符之间的字符串确定为方法名称。
具体地,例如第二关键词为public,第二字符为“(”,遍历到目标源代码中出现的字符串public void hello(){},此时可以确定方法名称为hello。
根据所述预设匹配规则,将所述方法名称后的括号内的字符串确定为方法参数。
具体地,例如遍历到目标源代码中出现的字符串public void hello(int a,charb){},此时可以确定int a,char b为hello方法的方法参数。
在一个或多个实施例中,所述根据所述预设匹配规则,将所述方法名称后的括号内的字符串确定为方法参数,包括:
根据所述预设匹配规则,确定所述方法名称后的括号内不包括第三字符的参数字符串。
将所述参数字符中逗号之前的字符子串确定为变量类型,所述逗号之后的字符子串确定为变量名称。
具体地,例如第三字符包括但不限于为空格字符,确定所述方法名称后的括号内不包括第三字符的参数字符串为“int a,char b”。将所述参数字符中逗号之前的字符子串int和char确定为变量类型,所述逗号之后的字符子串a和b确定为变量名称。
在一个或多个实施例中,所述对每个所述目标源代码文件进行解析之前,还包括:
根据待匹配字符串确定筛选目标字符的正则表达式;根据所述正则表达式确定预设匹配规则。
在一个或多个实施例中,所述根据当前源代码文件包含的类名称、方法名称和方法参数,生成所述当前源代码文件对应的单元测试文件,包括:
根据当前源代码文件包含的类名称、方法名称和方法参数,按照测试模板格式生成对应的单元测试类文件;
将与所述单元测试类文件对应的单元测试逻辑代码写入所述单元测试类文件中,得到所述当前源代码文件对应的单元测试文件。
具体地,例如生成的单元测试类文件包括类数据,例如通过测试类固定的模板格式public class测试类名字{},以及生成测试方法,每个测试方法的名字都以方法名字+Test后缀拼接而成。例如hello()为原始方法,helloTest()为单元测试的方法。
单元测试逻辑代码包括测试方法体,之后执行new测试类().测试方法(),然后将单元测试逻辑代码的内容放在测试方法括号之中,然后根据类名字生成一个测试类名字,测试类名字以class后缀结尾,比如类名字是Demo测试类名字是DemoTest,使用类名字生成一个.java结尾的测试类文件如DemoTest.java,将单元测试类型源码写入生成的单元测试的类文件之中即生成单元测试文件。
在一个或多个实施例中,所述单元测试类文件包括java类型文件,所述将与所述单元测试类文件对应的单元测试逻辑代码写入所述单元测试类文件中,得到所述当前源代码文件对应的单元测试文件,包括:
通过java文件IO流的方式,将与所述单元测试类文件对应的单元测试逻辑代码写入所述单元测试的类文件,得到所述当前源代码文件对应的单元测试文件。例如,将单元测试类型源码通过java文件IO流的方式写入刚刚生成的单元测试的类文件之中即可。
相关技术中开发人员要为代码中的方法编写单元测试内容。且开发人员要重复的为所有的类中的方法编写单元测试,如果类和方法很多需要逐一进行编写。然而人工编写的代码往往容易出现错误,比如语法错误,逻辑错误等。
为了解决上述技术问题,在一应用实施例中,如图4所示,上述单元测试方法还包括如下步骤:
S402,扫描当前项目下的所有代码。
S404,循环遍历代代码列表,判断是否完全遍历。若是,转入步骤S420;若否,转入步骤S406。
具体地,例如,这里的后缀名为.java,利用深度遍历算法遍历当前项目下的所有代码文件的路径列表,根据所述路径列表确定包括.java的源代码文件,并将包括.java后缀名的源代码文件作为目标源代码文件。
S406,动态加载当前代码文件。
S408,反射获取类信息,其包括类、方法和注解等信息。
S410,动态生成与当前代码类型匹配的单元测试类型文件。
S412,待测试方法的方法元信息计算。
S414,待测试方法调用对象生成策略计算。
S416,待测试方法调用参数计算。
S418,根据上述计算结果动态生成方法体与方法内容写入到测试类中。
步骤S418包括但不限于根据当前源代码文件包含的类名称、方法名称和方法参数,按照测试模板格式生成对应的单元测试类文件;
将与所述单元测试类文件对应的单元测试逻辑代码写入所述单元测试类文件中,得到所述当前源代码文件对应的单元测试文件。
具体地,例如生成的单元测试类文件包括类数据,例如通过测试类固定的模板格式public class测试类名字{},以及生成测试方法,每个测试方法的名字都以方法名字+Test后缀拼接而成。例如hello()为原始方法,helloTest()为单元测试的方法。
单元测试逻辑代码包括测试方法体,之后执行new测试类().测试方法(),然后将单元测试逻辑代码的内容放在测试方法括号之中,然后根据类名字生成一个测试类名字,测试类名字以class后缀结尾,比如类名字是Demo测试类名字是DemoTest,使用类名字生成一个.java结尾的测试类文件如DemoTest.java,将单元测试类型源码写入生成的单元测试的类文件之中即生成单元测试文件。
S420,测试单元文件生成结束。
本发明实施例还具备如下有益的技术效果:
1、不需要编写大量重复的单元测试代码,大大节省了人力物力。
2、自动生成的测试代码中不会生成带有语法错误的代码,可以避免通过人工编写产生错误的单元测试代码。
3、本发明实施例中生成的单元测试工具可以开发扩展,接入更多灵活需求的特性功能,能快速满足开发人员的需要。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
根据本发明实施例的另一个方面,还提供了一种用于实施上述单元测试方法的单元测试装置。如图5所示,该装置包括:
获取单元502,用于获取并加载当前项目下的目标源代码文件;
解析单元504,用于对每个所述目标源代码文件进行解析,并获取每个所述目标源代码文件中的类名称、方法名称和方法参数;
生成单元506,用于根据当前目标源代码文件包含的类名称、方法名称和方法参数,生成所述当前目标源代码文件对应的单元测试文件;
测试单元508,用于根据所述单元测试文件对所述当前项目进行单元测试。
在本发明实施例中,采用了获取并加载当前项目下的目标源代码文件;对每个所述目标源代码文件进行解析,并获取每个所述目标源代码文件中的类名称、方法名称和方法参数;根据当前目标源代码文件包含的类名称、方法名称和方法参数,生成所述当前目标源代码文件对应的单元测试文件;根据所述单元测试文件对所述当前项目进行单元测试的方法,在上述方法中通过对目标源代码文件进行解析,根据当前目标源代码文件包含的类名称、方法名称和方法参数,生成所述当前目标源代码文件对应的单元测试文件,可以避免人工编写代码产生的错误,提升了单元测试效率,减小了单元测试成本,进而解决了相关技术中单元测试的效率较低的技术问题。
在一个或多个实施例中,所述获取单元502,包括:
遍历模块,用于遍历当前项目下的所有代码文件的路径列表,根据所述路径列表确定包括预设后缀名的源代码文件,并将包括所述预设后缀名的源代码文件作为目标源代码文件;
加载模块,用于加载当前遍历到所述目标源代码文件。
在一个或多个实施例中,所述解析单元504,包括:
遍历目标源代码中的每个字符,执行如下操作:
第一确定模块,用于根据预设匹配规则,将第一关键词和第一符号之间去除空格字符后的字符串确定为类名称;
第二确定模块,用于根据所述预设匹配规则,在包括第二关键词且不包含所述第一关键词的代码行中,将空格字符和第二字符之间的字符串确定为方法名称;
第三确定模块,用于根据所述预设匹配规则,将所述方法名称后的括号内的字符串确定为方法参数。
在一个或多个实施例中,所述第三确定模块,包括:
第一确定子单元,用于根据所述预设匹配规则,确定所述方法名称后的括号内不包括第三字符的参数字符串;
第二确定子单元,用于将所述参数字符中逗号之前的字符子串确定为变量类型,所述逗号之后的字符子串确定为变量名称。
在一个或多个实施例中,所述单元测试装置,还包括:
第一确定单元,用于根据待匹配字符串确定筛选目标字符的正则表达式;
第二确定单元,用于根据所述正则表达式确定预设匹配规则。
在一个或多个实施例中,所述测试单元508,包括:
生成模块,用于根据当前源代码文件包含的类名称、方法名称和方法参数,按照测试模板格式生成对应的单元测试类文件;
写入模块,用于将与所述单元测试类文件对应的单元测试逻辑代码写入所述单元测试类文件中,得到所述当前源代码文件对应的单元测试文件。
在一个或多个实施例中,所述写入模块,包括:
写入子单元,用于通过java文件IO流的方式,将与所述单元测试类文件对应的单元测试逻辑代码写入所述单元测试的类文件,得到所述当前源代码文件对应的单元测试文件。
根据本申请实施例的又一个方面,还提供了一种用于实施上述单元测试方法的电子设备,该电子设备可以是图1所示的终端设备或服务器。本实施例以该电子设备为服务器为例来说明。如图6所示,该电子设备包括存储器602和处理器604,该存储器602中存储有计算机程序,该处理器604被设置为通过计算机程序执行上述任一项方法实施例中的步骤。
可选地,在本实施例中,上述电子设备可以位于计算机网络的多个网络设备中的至少一个网络设备。
可选地,在本实施例中,上述处理器可以被设置为通过计算机程序执行以下步骤:
S1,获取并加载当前项目下的目标源代码文件;
S2,对每个所述目标源代码文件进行解析,并获取每个所述目标源代码文件中的类名称、方法名称和方法参数;
S3,根据当前目标源代码文件包含的类名称、方法名称和方法参数,生成所述当前目标源代码文件对应的单元测试文件;
S4,根据所述单元测试文件对所述当前项目进行单元测试。
可选地,本领域普通技术人员可以理解,图6所示的结构仅为示意,电子装置电子设备也可以是智能手机(如Android手机、iOS手机等)、平板电脑、掌上电脑以及移动互联网设备(Mobile Internet Devices,MID)、PAD等终端设备。图6其并不对上述电子装置电子设备的结构造成限定。例如,电子装置电子设备还可包括比图6中所示更多或者更少的组件(如网络接口等),或者具有与图6所示不同的配置。
其中,存储器602可用于存储软件程序以及模块,如本申请实施例中的单元测试方法和装置对应的程序指令/模块,处理器604通过运行存储在存储器602内的软件程序以及模块,从而执行各种功能应用以及数据处理,即实现上述的单元测试方法。存储器602可包括高速随机存储器,还可以包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器602可进一步包括相对于处理器604远程设置的存储器,这些远程存储器可以通过网络连接至终端。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。其中,存储器602具体可以但不限于用于存储目标源代码文件。作为一种示例,如图6所示,上述存储器602中可以但不限于包括上述单元测试装置中的获取单元502、解析单元504、生成单元506和测试单元508。此外,还可以包括但不限于上述单元测试装置中的其他模块单元,本示例中不再赘述。
可选地,上述的传输装置606用于经由一个网络接收或者发送数据。上述的网络具体实例可包括有线网络及无线网络。在一个实例中,传输装置606包括一个网络适配器(Network Interface Controller,NIC),其可通过网线与其他网络设备与路由器相连从而可与互联网或局域网进行通讯。在一个实例中,传输装置606为射频(Radio Frequency,RF)模块,其用于通过无线方式与互联网进行通讯。
此外,上述电子设备还包括:显示器608,用于显示单元测试结果;和连接总线610,用于连接上述电子设备中的各个模块部件。
在其他实施例中,上述终端设备或者服务器可以是一个分布式系统中的一个节点,其中,该分布式系统可以为区块链系统,该区块链系统可以是由该多个节点通过网络通信的形式连接形成的分布式系统。其中,节点之间可以组成点对点(P2P,Peer To Peer)网络,任意形式的计算设备,比如服务器、终端等电子设备都可以通过加入该点对点网络而成为该区块链系统中的一个节点。
在一个或多个实施例中,本申请还提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述单元测试方法。其中,该计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。
可选地,在本实施例中,上述计算机可读的存储介质可以被设置为存储用于执行以下步骤的计算机程序:
S1,获取并加载当前项目下的目标源代码文件;
S2,对每个所述目标源代码文件进行解析,并获取每个所述目标源代码文件中的类名称、方法名称和方法参数;
S3,根据当前目标源代码文件包含的类名称、方法名称和方法参数,生成所述当前目标源代码文件对应的单元测试文件;
S4,根据所述单元测试文件对所述当前项目进行单元测试。
可选地,在本实施例中,本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令终端设备相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:闪存盘、只读存储器(Read-Only Memory,ROM)、随机存取器(Random Access Memory,RAM)、磁盘或光盘等。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
上述实施例中的集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在上述计算机可读取的存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在存储介质中,包括若干指令用以使得一台或多台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例方法的全部或部分步骤。
在本发明的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的客户端,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
以上仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (10)
1.一种单元测试方法,其特征在于,包括:
获取并加载当前项目下的目标源代码文件;
对每个所述目标源代码文件进行解析,并获取每个所述目标源代码文件中的类名称、方法名称和方法参数;
根据当前目标源代码文件包含的类名称、方法名称和方法参数,生成所述当前目标源代码文件对应的单元测试文件;
根据所述单元测试文件对所述当前项目进行单元测试。
2.根据权利要求1所述的方法,其特征在于,所述获取并加载当前项目下的所有源代码文件,包括:
遍历当前项目下的所有代码文件的路径列表,根据所述路径列表确定包括预设后缀名的源代码文件,并将包括所述预设后缀名的源代码文件作为目标源代码文件;
加载当前遍历到所述目标源代码文件。
3.根据权利要求1所述的方法,其特征在于,所述对每个所述目标源代码文件进行解析,并获取每个所述目标源代码文件中的类名称、方法名称和方法参数,包括:
遍历目标源代码中的每个字符,执行如下操作:
根据预设匹配规则,将第一关键词和第一符号之间去除空格字符后的字符串确定为类名称;
根据所述预设匹配规则,在包括第二关键词且不包含所述第一关键词的代码行中,将空格字符和第二字符之间的字符串确定为方法名称;
根据所述预设匹配规则,将所述方法名称后的括号内的字符串确定为方法参数。
4.根据权利要求3所述的方法,其特征在于,所述根据所述预设匹配规则,将所述方法名称后的括号内的字符串确定为方法参数,包括:
根据所述预设匹配规则,确定所述方法名称后的括号内不包括第三字符的参数字符串;
将所述参数字符串中逗号之前的字符子串确定为变量类型,所述逗号之后的字符子串确定为变量名称。
5.根据权利要求3所述的方法,其特征在于,所述对每个所述目标源代码文件进行解析之前,还包括:
根据待匹配字符串确定筛选目标字符的正则表达式;
根据所述正则表达式确定预设匹配规则。
6.根据权利要求1所述的方法,其特征在于,所述根据当前目标源代码文件包含的类名称、方法名称和方法参数,生成所述当前目标源代码文件对应的单元测试文件,包括:
根据当前目标源代码文件包含的类名称、方法名称和方法参数,按照测试模板格式生成对应的单元测试类文件;
将与所述单元测试类文件对应的单元测试逻辑代码写入所述单元测试类文件中,得到所述当前源代码文件对应的单元测试文件。
7.根据权利要求6所述的方法,其特征在于,所述单元测试类文件包括java类型文件,所述将与所述单元测试类文件对应的单元测试逻辑代码写入所述单元测试类文件中,得到所述当前源代码文件对应的单元测试文件,包括:
通过java文件IO流的方式,将与所述单元测试类文件对应的单元测试逻辑代码写入所述单元测试的类文件,得到所述当前源代码文件对应的单元测试文件。
8.一种单元测试装置,其特征在于,包括:
获取单元,用于获取并加载当前项目下的目标源代码文件;
解析单元,用于对每个所述目标源代码文件进行解析,并获取每个所述目标源代码文件中的类名称、方法名称和方法参数;
生成单元,用于根据当前目标源代码文件包含的类名称、方法名称和方法参数,生成所述当前目标源代码文件对应的单元测试文件;
测试单元,用于根据所述单元测试文件对所述当前项目进行单元测试。
9.一种计算机可读的存储介质,其特征在于,所述计算机可读的存储介质包括存储的程序,其中,所述程序运行时执行所述权利要求1至7任一项中所述的方法。
10.一种电子设备,包括存储器和处理器,其特征在于,所述存储器中存储有计算机程序,所述处理器被设置为通过所述计算机程序执行所述权利要求1至7任一项中所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211435694.2A CN115757126A (zh) | 2022-11-16 | 2022-11-16 | 单元测试方法、装置及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211435694.2A CN115757126A (zh) | 2022-11-16 | 2022-11-16 | 单元测试方法、装置及电子设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115757126A true CN115757126A (zh) | 2023-03-07 |
Family
ID=85373836
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211435694.2A Pending CN115757126A (zh) | 2022-11-16 | 2022-11-16 | 单元测试方法、装置及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115757126A (zh) |
-
2022
- 2022-11-16 CN CN202211435694.2A patent/CN115757126A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112394942B (zh) | 基于云计算的分布式软件开发编译方法及软件开发平台 | |
CN110096434A (zh) | 一种接口测试方法及装置 | |
CN110221968A (zh) | 软件测试方法及相关产品 | |
CN108572911A (zh) | 自动化安全测试方法、装置、电子设备和可读存储介质 | |
CN107341014A (zh) | 电子设备、技术文档的生成方法及装置 | |
CN114610640B (zh) | 一种面向物联网可信执行环境的模糊测试方法和系统 | |
CN113238740B (zh) | 代码生成方法、代码生成装置、存储介质及电子设备 | |
CN112241360A (zh) | 一种测试用例生成方法、装置、设备及存储介质 | |
CN110543427B (zh) | 测试用例存储方法、装置、电子设备及存储介质 | |
CN113268245A (zh) | 代码分析方法、装置及存储介质 | |
CN112729868A (zh) | 一种车辆诊断方法、装置、设备及介质 | |
CN114116510A (zh) | 一种接口参数校验方法及装置 | |
CN110362317B (zh) | 一种代码转换方法、装置和存储介质 | |
CN116166907B (zh) | 一种使用WebAssembly和服务页面编译技术开发Web应用的方法及装置 | |
JP7318704B2 (ja) | テスト装置、テスト方法及びプログラム | |
CN116841900A (zh) | 接口文档、测试用例生成方法、装置、计算机设备和存储介质 | |
CN115757126A (zh) | 单元测试方法、装置及电子设备 | |
CN117009972A (zh) | 漏洞检测方法、装置、计算机设备和存储介质 | |
CN115292178A (zh) | 测试数据搜索方法、装置、存储介质以及终端 | |
CN111061627B (zh) | 网页埋点方法、装置、电子设备及存储介质 | |
CN114528218A (zh) | 测试程序的生成方法、装置、存储介质以及电子设备 | |
CN110471708B (zh) | 基于可重用组件的配置项获取的方法及装置 | |
CN114385155A (zh) | vue项目可视化工具生成方法、装置、设备及存储介质 | |
CN107506299A (zh) | 一种代码分析方法及终端设备 | |
CN112433943A (zh) | 基于抽象语法树的环境变量检测方法、装置、设备及介质 |
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 |