Linux内核模块测试,一种Linux内核模块的单元测试方法

一种Linux内核模块的单元测试方法

【技术领域】

[0001]本发明涉及计算机系统及存储技术领域,更具体地说,涉及一种Linux内核模块的单元测试方法。

【背景技术】

[0002]单元测试是软件研发过程中的一个关键步骤,是对代码质量和产品质量检测的一个重要环节。

[0003]现有技术的Linux内核模块的单元测试方法通常是利用用户态的单元测试框架完成的,而Linux内核模块是在内核空间运行的,因此,当利用用户态的单元测试框架对Linux内核模块进行单元测试时,存在测试准确度、可靠性及覆盖率等较低等一系列问题。因此,现有技术中利用用户态的单元测试框架实现的单元测试方法并不适用于Linux内核模块的单元测试。

[0004]综上所述,如何提供一种适用于Linux内核模块的单元测试方法,是目前本领域技术人员亟待解决的问题。

【发明内容】

[0005]本发明的目的是提供一种Linux内核模块的单元测试方法,该方法适用于Linux内核模块。

[0006]—种Linux内核模块的单元测试方法,包括:

[0007]对被测模块及单元测试模块进行编译,其中,所述被测模块包含所述单元测试模块;

[0008]将所述被测模块加载至内核空间;

[0009]利用所述单元测试模块对所述被测模块进行测试,得到测试结果。

[0010]优选的,所述被测模块包含所述单元测试模块,包括:

[0011]所述单元测试模块的外部接口编写在所述被测模块的主函数流程中;

[0012]利用所述单元测试模块对所述被测模块进行测试,包括:

[0013]通过所述单元测试模块的外部接口调用所述单元测试模块,并利用所述单元测试模块对所述被测模块进行测试。

[0014]优选的,所述单元测试模块通过sysfs的接口方式提供其外部接口。

[0015]优选的,利用所述单元测试模块对所述被测模块进行测试,得到测试结果,包括:

[0016]利用所述单元测试模块对所述被测模块的特定模块接口进行测试,得到测试结果;所述测试结果包括:所述特定模块接口的接口函数名、所述特定模块接口的功能是否满足要求以及所述Linux内核模块所属的Linux内核打印出的日志信息。

[0017]优选的,利用所述单元测试模块对所述被测模块进行测试,得到测试结果,包括:

[0018]利用所述单元测试模块采用旁路测试的方法通过宏定义的方式对所述被测模块进行错误注入,得到测试结果。

[0019]优选的,得到所述测试结果之后,所述方法还包括:

[0020]判断所述测试结果是否符合预设结果,如果符合,则证明所述被测模块通过测试。

[0021]优选的,在对所述被测模块及单元测试模块进行编译之前,还包括:

[0022]对所述被测模块进行功能初始化。

[0023]优选的,所述方法还包括:

[0024]在所述被测模块的主函数流程中加入条件判断语句;并通过所述条件判断语句确定是否需要利用所述单元测试模块对所述被测模块进行测试。

[0025]本发明提供的一种Linux内核模块的单元测试方法,包括:对被测模块及单元测试模块进行编译,其中,所述被测模块包含所述单元测试模块;将所述被测模块加载至内核空间;利用所述单元测试模块对所述被测模块进行测试,得到测试结果。与现有技术相比,本申请同时对被测模块及单元测试模块进行编译,并且被测模块中包含单元测试模块,进一步将被测模块加载至内核空间进行单元测试,符合了 Linux内核模块,即被测模块是在内核空间运行的特点,从而有效提高了测试准确度、可靠性及覆盖率等。

【附图说明】

[0026]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

[0027]图1为本发明实施例提供的本发明实施例提供的一种Linux内核模块的单元测试方法的流程图。

【具体实施方式】

[0028]下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

[0029]请参阅图1,其示出了本发明实施例提供的一种Linux内核模块的单元测试方法的流程图,包括:

[0030]Sll:对被测模块及单元测试模块进行编译,其中,被测模块包含单元测试模块。

[0031]其中,被测模块即为Linux内核模块;而编译则是将被测模块及单元测试模块所包含的代码翻译成等价的另一种语言的程序,以进行单元测试。

[0032]S12:将被测模块加载至内核空间。

[0033]其中,加载这一动作即为将被测模块调到内核空间,而内核空间的具体概念为:Linux内核模块所属的系统,即Linux系统对自身进行了划分,一部分核心软件独立于普通应用程序,运行在较高的特权级别上,它们驻留在被保护的内存空间上,拥有访问硬件设备的所有权限,Linux系统将此称为内核空间。

[0034]S13:利用单元测试模块对被测模块进行测试,得到测试结果。

[0035]本申请同时对被测模块及单元测试模块进行编译,并且被测模块中包含单元测试模块,进一步将被测模块加载至内核空间进行单元测试,符合了 Linux内核模块,即被测模块是在内核空间运行的特点,从而有效提高了测试准确度、可靠性及覆盖率等。

[0036]上述实施例提供的一种Linux内核模块的单元测试方法中,将单元测试模块包含于被测模块的方式可以根据实际需要进行设定,优选的一种为将单元测试模块的外部接口编写在被测模块的主函数流程中。由此,利用单元测试模块对被测模块进行测试,则具体为:通过单元测试模块的外部接口调用单元测试模块,并利用单元测试模块对被测模块进行测试。

[0037]本发明实施例所提供的一种Linux内核模块的单元测试方法采用常用的编译方法,区别仅仅是,将单元测试模块的外部接口编写在被测模块的主函数流程中,由此,能够在减少工作量的同时实现本发明实施例所提供的一种Linux内核模块的单元测试方法所能够实现的有益效果。而当利用单元测试模块对被测模块进行测试时,只需通过调用单元测试的外部接口调用单元测试模块,简便易行。

[0038]上述实施例提供的一种Linux内核模块的单元测试方法中,单元测试模块可以通过sysfs的接口方式提供其外部接口。

[0039]其中,sysfs是一种虚拟文件系统,这个文件系统不仅可以把硬件设备和驱动程序的信息从Linux内核输出至用户空间,也可以用来对硬件设备和驱动程序做设置。与本发明实施例提供的上述技术特征综合考虑,本发明实施例提供的一种Linux内核模块的单元测试方法能够在用户空间和内核空间之间架起一个测试桥梁,使得测试单元模块对于被测模块的测试既可以在内核态时进行,也可以通过sysfs的接口方式提供的外部接口在命令行进行。即,能够通过多种方式实现对于被测模块的测试,而具体通过哪种方式根据实际情况进行确定,这使得本发明实施例提供的单元测试方法更加完善。

[0040]上述实施例提供的一种Linux内核模块的单元测试方法中,利用单元测试模块对被测模块进行测试,得到测试结果,可以包括:

[0041]利用单元测试模块对被测模块的特定模块接口进行测试,得到测试结果;测试结果包括:特定模块接口的接口函数名、特定模块接口的功能是否满足要求以及Linux内核模块所属的Linux内核打印出的日志信息。

[0042]其中,特定模块接口是根据实际需要进行确定的,其与单元测试模块的设置相对应;特定模块接口的数量可以是一个,也可以是多个。通过单元测试模块对被测模块

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值