CN103092750A - 一种单元测试方法及装置 - Google Patents
一种单元测试方法及装置 Download PDFInfo
- Publication number
- CN103092750A CN103092750A CN2012104554074A CN201210455407A CN103092750A CN 103092750 A CN103092750 A CN 103092750A CN 2012104554074 A CN2012104554074 A CN 2012104554074A CN 201210455407 A CN201210455407 A CN 201210455407A CN 103092750 A CN103092750 A CN 103092750A
- Authority
- CN
- China
- Prior art keywords
- initialization
- data
- test
- measured data
- test case
- 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
Abstract
本发明公开了一种单元测试方法及装置,涉及计算机领域。在进行单元测试前,先初始化被测数据和/或测试用例数据,从而使得测试过程中所涉及的数据均为初始化后的数据,大大降低甚至消除测试用例间的数据耦合,提高测试用例代码的健壮性,使每个测试用例相互独立,互不影响,从而提高单元测试效率。
Description
技术领域
本发明涉及计算机技术,尤其涉及一种单元测试方法及装置。
背景技术
目前,在进行开发过程中,通常使用测试用例进行单元测试,而使用测试用例进行单元测试的过程中,容易出现测试用例耦合的情况。
测试用例间耦合是指两个或两个以上的测试用例之间存在相互影响,改变一个测试用例会导致其他测试用例运行不正常或测试结果发生变化的现象。
避免测试用例之间的耦合是单元测试中非常重要的问题。测试用例间独立无耦合,会使测试工程的多个测试用例更加健壮,即使改变测试用例的执行顺序也不会影响测试结果。
如果测试耦合在一起,即使在一个测试用例中的一个小的更新,可能也会导致其他测试用例的运行不正常,甚至引发意想不到的错误。另外,不同的运行环境,执行测试用例的顺序是不确定的。即在不同的运行环境中,同一测试用例,可能产生不同的结果。
通常,在以下情况下,认为不同测试用例之间发生了耦合:
(1)一个测试用例直接使用其他测试用例的输出数据;
(2)一个测试用例未执行完毕,非正常的转到其他测试用例继续执行;
(3)操作公共数据的函数接口未初始化的情况,多个测试用例同时调用了该函数接口;
(4)一个测试用例有多个入口,即测试用例的执行顺序是不确定的。
在实际的单元测试中,测试用例之间的耦合经常出现,尤其在测试一些复杂的函数时,公共的数据和调用接口比较多,各个测试用例如果直接使用这些数据或接口,就造成了测试用例间的耦合。
测试用例间的耦合,经常导致测试用例执行后的测试结果发生改变,导致程序异常发生未知错误,甚至导致程序崩溃。并且,在实际应用中,被测程序都是相对复杂,测试用例的构造也会相应的复杂,此时很难定位问题。
发明内容
本发明实施例提供一种单元测试方法及装置,以实现降低测试用例间的数据耦合。
一种单元测试方法,包括:
初始化被测数据和/或测试用例数据;
使用所述测试用例对所述被测数据进行单元测试。
一种单元测试装置,包括:
初始化单元,用于初始化被测数据和/或测试用例数据;
测试单元,用于使用所述测试用例对所述被测数据进行单元测试。
本发明实施例提供一种单元测试方法及装置,在进行单元测试前,先初始化被测数据和/或测试用例数据,从而使得测试过程中所涉及的数据均为初始化后的数据,大大降低甚至消除测试用例间的数据耦合,提高测试用例代码的健壮性,使每个测试用例相互独立,互不影响,从而提高单元测试效率。
附图说明
图1为本发明实施例提供的单元测试方法流程图;
图2为本发明实施例提供的单元测试前准备工作流程图;
图3为本发明实施例提供的单元测试装置结构示意图。
具体实施方式
本发明实施例提供一种单元测试方法及装置,在进行单元测试前,先初始化被测数据和/或测试用例数据,从而使得测试过程中所涉及的数据均为初始化后的数据,大大降低甚至消除测试用例间的数据耦合,提高测试用例代码的健壮性,使每个测试用例相互独立,互不影响,从而提高单元测试效率。
如图1所示,本发明实施例提供的单元测试方法,包括:
步骤S101、初始化被测数据和/或测试用例数据;
步骤S102、使用测试用例对被测数据进行单元测试。
由于在步骤S102中进行单元测试前,先在步骤S101中对被测数据和/或测试用例数据进行了初始化,避免了其它数据或其它测试对本次单元测试的影响,降低了测试用例间的数据耦合。
具体的,在步骤S101中,初始化被测数据和/或测试用例数据,具体包括:
(1)初始化被测数据:
首先查找到被测文件中定义的被测数据,主要为被测文件中的全局数据,这些数据是单元测试的重点。
在确定被测数据后,即可对所确定的被测数据进行初始化,对于简单的被测数据,可以通过测试用例设定的初始化值进行初始化,对于复杂被测数据可以通过构造的函数进行,这样的好处在于,每次进行同一环境下的测试时,均可调用该函数进行初始化。
在进行被测数据的初始化后,即可消除测试用例之间被测全局数据的耦合,从而使得先执行的测试用例不会影响后执行的测试用例。
(2)必要时还需要初始化测试用例数据,具体包括:
确定测试用户所涉及的测试公共数据;
初始化测试公共数据。
通常,在单元测试中,不同测试用例会用到一些相同的用于辅助测试的数据,称为测试公共数据。例如,同一模块的不同的接口都要对一个链表进行操作。那么对于这些接口测试时,所构建的测试用例也都要操作该链表。但是为了消除测试用例间的耦合性,每个测试用例在开始进行测试时,都要重新构造这样的数据,显然这样的测试效率是非常低的,为了解决这个问题,提高测试效率,需要构造一些测试公共数据,供不同的测试用例使用;
首先从被测的整个文件或整个模块来确定需要构造的公共数据,通常可以从实际功能出发来构造数据,比如特定模块需要的协议报文数据,存储链表数据等。由于大多数情况下这些数据都比较复杂,所以不直接采取变量定义的方式(因为变量定义的方式需要占用大量的栈空间),通过编写函数来实现测试公共数据的构造较佳(函数中使用动态分配的方式来为复制数据分配堆空间)。
测试用例中使用测试公共数据,提高了测试效率,但也容易出现数据耦合,造成测试用例之间的相互影响。因此,需要在使用每个测试用例前,调用相应初始化接口对测试数据进行初始化,从而保证测试数据使用前都经过了处理。除了初始化接口,针对测试公共数据还可以通过函数进行其它操作,例如,创建,查找,修改,删除等。构造这些函数的目的是方便在测试用例中对测试公共数据的操作,通过这种函数调用的方法,使测试用例的代码量大大减少,测试用例看上去精简易懂,而且非常利于后期的测试维护。
下面,对单元测试过程进行具体说明:
首先,如图2所示,在进行单元测试前,需要进行的准备工作包括:
步骤S201、确定被测公共数据,即进行单元测试时的被测数据;
步骤S202、构造被测数据的初始化接口;通过该初始化接口即可将相应的被测数据进行初始化,初始化的具体值根据实际测试环境确定,对于同一组被测数据的不同的测试环境,可以构造不同的初始化接口来进行初始化;
步骤S203、确定测试公共数据,即进行单元测试时的测试用例数据;
步骤S204、构造测试用例数据的初始化接口及操作函数。
在进行上述准备后,即可进行单元测试,进行单元测试的过程如图1所示,其中,步骤S101的初始化被测数据可以通过调用步骤S202构造的被测数据初始化接口来实现,初始化测试用例数据可以通过调用步骤S204构造的测试用例数据初始化接口来实现;同时,可以通过步骤S204构造的操作函数来对测试公共数据进行相应的操作。
最后,进行步骤S102,执行单元测试,输出测试结果。
本发明实施例还相应提供一种单元测试装置,如图3所示,包括:
初始化单元301,用于初始化被测数据和/或测试用例数据;
测试单元302,用于使用测试用例对被测数据进行单元测试。
其中,初始化单元301初始化被测数据,具体包括:
确定所述被测数据中的全局数据;
根据预先设定的初始化值,对被测数据中的全局数据进行初始化。
预先设定的初始化值,可以根据测试环境进行设定。
初始化单元301初始化测试用例数据,具体包括:
确定测试用例所涉及的测试公共数据;
初始化测试公共数据。
其中,初始化单元301初始化测试公共数据,具体为:
通过相应的初始化接口调用相应的初始化函数,初始化测试公共数据;
初始化单元301初始化被测数据,具体为:
通过相应的初始化接口调用相应的初始化函数,初始化被测数据。
本发明实施例提供一种单元测试方法及装置,在进行单元测试前,先初始化被测数据和/或测试用例数据,从而使得测试过程中所涉及的数据均为初始化后的数据,大大降低甚至消除测试用例间的数据耦合,提高测试用例代码的健壮性,使每个测试用例相互独立,互不影响,从而提高单元测试效率。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (10)
1.一种单元测试方法,其特征在于,包括:
初始化被测数据和/或测试用例数据;
使用所述测试用例对所述被测数据进行单元测试。
2.如权利要求1所述的方法,其特征在于,所述初始化被测数据,具体包括:
确定所述被测数据中的全局数据;
根据预先设定的初始化值,对被测数据中的全局数据进行初始化。
3.如权利要求2所述的方法,其特征在于,所述预先设定的初始化值,根据测试环境进行设定。
4.如权利要求1所述的方法,其特征在于,所述初始化测试用例数据,具体包括:
确定所述测试用例所涉及的测试公共数据;
初始化所述测试公共数据。
5.如权利要求4所述的方法,其特征在于,所述初始化所述测试公共数据,具体为:
通过相应的初始化接口调用相应的初始化函数,初始化所述测试公共数据;
所述初始化被测数据,具体为:
通过相应的初始化接口调用相应的初始化函数,初始化所述被测数据。
6.一种单元测试装置,其特征在于,包括:
初始化单元,用于初始化被测数据和/或测试用例数据;
测试单元,用于使用所述测试用例对所述被测数据进行单元测试。
7.如权利要求6所述的装置,其特征在于,所述初始化单元初始化被测数据,具体包括:
确定所述被测数据中的全局数据;
根据预先设定的初始化值,对被测数据中的全局数据进行初始化。
8.如权利要求7所述的装置,其特征在于,所述预先设定的初始化值,根据测试环境进行设定。
9.如权利要求6所述的装置,其特征在于,所述初始化单元初始化测试用例数据,具体包括:
确定所述测试用例所涉及的测试公共数据;
初始化所述测试公共数据。
10.如权利要求9所述的装置,其特征在于,所述初始化单元初始化所述测试公共数据,具体为:
通过相应的初始化接口调用相应的初始化函数,初始化所述测试公共数据;
所述初始化单元初始化被测数据,具体为:
通过相应的初始化接口调用相应的初始化函数,初始化所述被测数据。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2012104554074A CN103092750A (zh) | 2012-11-13 | 2012-11-13 | 一种单元测试方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2012104554074A CN103092750A (zh) | 2012-11-13 | 2012-11-13 | 一种单元测试方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN103092750A true CN103092750A (zh) | 2013-05-08 |
Family
ID=48205351
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2012104554074A Pending CN103092750A (zh) | 2012-11-13 | 2012-11-13 | 一种单元测试方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103092750A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105630685A (zh) * | 2016-01-29 | 2016-06-01 | 广州酷狗计算机科技有限公司 | 程序接口测试方法及装置 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1862511A (zh) * | 2006-02-28 | 2006-11-15 | 华为技术有限公司 | 一种软件单元的测试方法 |
CN1873626A (zh) * | 2005-06-01 | 2006-12-06 | 中兴通讯股份有限公司 | 一种自动生成桩和驱动函数的单元测试系统及方法 |
CN101110055A (zh) * | 2007-08-31 | 2008-01-23 | 中兴通讯股份有限公司 | 在单元测试中实现通用桩函数的装置及其实现方法 |
CN101814023A (zh) * | 2009-02-23 | 2010-08-25 | 珠海中慧微电子有限公司 | 单相表计量管理开发系统 |
CN102096630A (zh) * | 2009-12-10 | 2011-06-15 | 大唐移动通信设备有限公司 | 一种软件测试方法和装置 |
-
2012
- 2012-11-13 CN CN2012104554074A patent/CN103092750A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1873626A (zh) * | 2005-06-01 | 2006-12-06 | 中兴通讯股份有限公司 | 一种自动生成桩和驱动函数的单元测试系统及方法 |
CN1862511A (zh) * | 2006-02-28 | 2006-11-15 | 华为技术有限公司 | 一种软件单元的测试方法 |
CN101110055A (zh) * | 2007-08-31 | 2008-01-23 | 中兴通讯股份有限公司 | 在单元测试中实现通用桩函数的装置及其实现方法 |
CN101814023A (zh) * | 2009-02-23 | 2010-08-25 | 珠海中慧微电子有限公司 | 单相表计量管理开发系统 |
CN102096630A (zh) * | 2009-12-10 | 2011-06-15 | 大唐移动通信设备有限公司 | 一种软件测试方法和装置 |
Non-Patent Citations (1)
Title |
---|
何腾蛟: "分布式系统测试模型与框架的研究与应用", 《中国优秀硕士学位论文全文数据库·信息科技辑》, vol. 2009, no. 11, 15 November 2009 (2009-11-15) * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105630685A (zh) * | 2016-01-29 | 2016-06-01 | 广州酷狗计算机科技有限公司 | 程序接口测试方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TWI477967B (zh) | 用以實現gpu加速位址轉換之系統及方法以及圖形處理器 | |
CN104965757A (zh) | 虚拟机热迁移的方法、虚拟机迁移管理装置及系统 | |
CN106201481A (zh) | 应用程序开发系统中的组件管理方法和装置 | |
KR20160124794A (ko) | Dram 결함들의 커널 마스킹 | |
CN103718156B (zh) | Cpu/gpu同步机制 | |
CN104731569A (zh) | 一种数据处理方法及相关设备 | |
CN104407933A (zh) | 一种数据的备份方法及装置 | |
CN104881330A (zh) | 一种多进程共享数据的方法和装置 | |
CN104104705B (zh) | 分布式存储系统的接入方法和设备 | |
JP2018514867A (ja) | Dspエンジンおよび改良されたコンテキストスイッチ能力を有する中央処理ユニット | |
CN113569508B (zh) | 基于id进行数据索引与访问的数据库模型构建方法及设备 | |
CN104765603A (zh) | 应用程序构建方法及装置 | |
CN109324874B (zh) | 一种虚拟机内存快照导入块设备的方法、系统及装置 | |
CN105302536A (zh) | MapReduce应用的相关参数的配置方法和装置 | |
CN109871290A (zh) | 应用于Java的调用堆栈追踪方法、装置和存储介质 | |
US20200371827A1 (en) | Method, Apparatus, Device and Medium for Processing Data | |
CN103699627B (zh) | 一种基于Hadoop集群的超大文件并行数据块定位方法 | |
CN105335203A (zh) | 共享库的二进制翻译执行方法和装置 | |
CN103092750A (zh) | 一种单元测试方法及装置 | |
WO2024001032A1 (zh) | 在区块链系统中执行交易的方法、区块链系统和节点 | |
CN104182534A (zh) | 一种数据搜索的方法及装置 | |
US11392406B1 (en) | Alternative interrupt reporting channels for microcontroller access devices | |
CN102063308A (zh) | 一种用于地震勘探资料处理流程控制的方法 | |
Poyraz et al. | Application-specific I/O optimizations on petascale supercomputers | |
CN111832714B (zh) | 运算方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination |