单元测试

合集下载

单元测试和开发自测

单元测试和开发自测

单元测试和开发自测单元测试和开发自测是软件开发中重要的质量保障环节,它们能够有效地发现和修复代码中的bug,提高软件的稳定性和可靠性。

本文将介绍单元测试和开发自测的概念、目的和方法,并就其在软件开发流程中的重要性进行探讨。

一、概念及目的1. 单元测试概念单元测试是软件开发中的一种测试方法,用于验证程序中最小可测试单元的正确性。

最小可测试单元可以是函数、方法、类等,通过输入一组预置条件,检查输出是否满足预期。

单元测试通常由开发人员编写,并在开发过程中频繁运行。

2. 开发自测概念开发自测是指开发人员在编写代码过程中主动进行的测试活动。

开发人员可以通过输入特定的测试数据,检查代码的逻辑和功能是否符合预期。

开发自测旨在尽早发现代码中的问题,并在提交给其他团队成员之前进行修复。

3. 目的单元测试和开发自测的主要目的是提高软件代码的质量。

通过及早发现和修复问题,减少后期测试和维护阶段的成本。

此外,单元测试和开发自测还能够增强开发人员对代码的理解和可维护性,促进团队之间的协作和沟通。

二、方法与实践1. 单元测试方法单元测试通常采用白盒测试的方法,即开发人员能够访问和了解被测试单元的内部结构和实现细节。

一般而言,单元测试应遵循以下原则:- 尽早编写:在开发过程中即可编写基础的单元测试,保证代码的正确性。

- 高度独立:每个单元测试应该是相互独立、可独立运行、不受其他测试结果影响。

- 全面覆盖:覆盖常见输入、边界条件和异常情况,确保代码具有高度的可靠性。

- 可自动化:借助自动化测试框架,提高测试效率和重复利用性。

2. 开发自测实践开发自测是开发人员与代码进行密切互动的过程。

以下是一些实践建议:- 定期运行自测:在开发过程中,定期运行自测,及时发现问题并进行修复。

- 关注边界条件:特别注重对边界条件的测试,包括最大值、最小值、边缘情况等。

- 模拟异常情况:主动模拟可能出现的异常情况,保证代码在各种情况下的稳定性。

- 与他人合作:与其他开发人员进行代码评审和知识分享,借助集体智慧来提高代码质量。

第2讲-单元测试(白盒测试)

第2讲-单元测试(白盒测试)
5
单元测试的方法
单元测试主要采用白盒测试方法,辅以黑盒测试 方法。白盒测试方法应用于代码评审、单元程序 检验之中,而黑盒测试方法则应用于模块、组件 等大单元的功能测试之中
6
黑盒方法和白盒方法
黑盒测试方法(Blake-box Testing),是把程序看作
一个不能打开的黑盒子,不考虑程序内部结构和内部特性 ,而是考察数据的输入、条件限制和数据输出,完成测试
60代码审查代码审查的范围和方法代码规范性的审查代码缺陷检查表61代码审查的范围和方法代码审查的目的就是为了产生合格的代码检查源程序编码是否符合详细设计的编码规定确保编码与设计的一致性和可追踪性审查的内容编程规则62代码规范性的审查代码规范性的审查将助于更早地发现缺陷代码质量的提高而且可以帮助程序员遵守规则养成好的习惯以达到预防缺陷的目的代码风格和编程规则两者不可缺一都应列入代码评审的范围里命名规则缩进与对齐注释和函数处理63代码缺陷检查表把程序设计中可能发生的各种缺陷进行分类以每一类列举尽可能多的典型缺陷形成代码缺陷检查表
16
判定覆盖
判定覆盖:通过执行足够的测试用例,使得程序中的每个 判定至少都获得一次“真”值和“假”值, 也就是使程 序中的每个取“真”分支和取“假”分支至少均经历一次 ,也称为“分支覆盖”。
要实现DoWork函数的判定覆盖,需要设计两个测试用例
测试用例的输入为:{x=4、y=5、z=5};{x=2、y=5、z=5} 程序执行的路径分别是:abd;ace
使用acd、abe两条路径的用例也满足判定覆盖
分析:上述两个测试用例不仅满足了判定覆盖,同时还做 到语句覆盖。从这点看似乎判定覆盖比语句覆盖更强一些 ,但仍然无法确定判定内部条件的错误。例如把第二个判 定中的条件y>5错误写为y<5,使用上述测试用例,照样能 按原路径执行而不影响结果。因此,需要有更强的逻辑覆 17 盖准则去检验判定内的条件。

单元测试的主要测试内容包括哪些方面

单元测试的主要测试内容包括哪些方面

单元测试的主要测试内容包括哪些方面
在软件开发过程中,单元测试是一个非常重要的环节,它是检验软件模块是否
符合设计要求和规范的有效手段。

单元测试的主要测试内容包括以下几个方面:
测试基本功能
单元测试首先要测试软件模块的基本功能是否正常。

这包括输入数据的正确性、输出结果的准确性、程序逻辑的正确性等方面。

通过针对每个函数或模块的测试用例,验证软件是否按照预期工作。

处理边界情况
在进行单元测试时,需要特别关注边界情况。

边界情况是指那些可能导致程序
出现异常或错误行为的极端情况,例如最小值、最大值、空值等情况。

对边界情况的测试可以帮助发现潜在的问题,提高软件的稳定性和健壮性。

异常处理
单元测试还需要覆盖软件模块对异常情况的处理能力。

比如当输入数据不合法时,程序是否能够正确地捕获并处理异常,避免程序崩溃或产生意外结果。

通过编写针对异常情况的测试用例,可以确保软件在面对异常情况时能够正确地处理。

性能测试
除了功能测试,单元测试还应包括对软件模块的性能进行评估。

性能测试可以
检查模块在不同负载下的运行速度、资源消耗情况等,帮助我们发现潜在的性能瓶颈和优化空间。

兼容性测试
在进行单元测试时,还需要考虑软件模块在不同环境和平台上的兼容性。

通过
在不同操作系统、浏览器或设备上运行测试用例,可以确保软件在不同环境下都能够正常运行。

总结起来,单元测试的主要测试内容包括功能测试、边界测试、异常处理、性
能测试和兼容性测试等方面。

通过全面覆盖这些测试内容,可以有效地保证软件模块的质量和稳定性。

单元测试是啥意思

单元测试是啥意思

单元测试是啥意思单元测试是软件开发中的一种测试方法,用于检查一个单元(最小的可测试部分)在特定情况下是否能够正常工作。

在软件开发过程中,单元测试是非常重要的环节,它可以帮助开发人员验证代码的正确性,并提高代码质量。

单元测试的作用单元测试的主要作用在于发现代码中的错误和问题,防止这些问题在后续的开发阶段造成更大的影响。

通过单元测试,开发人员可以验证每个单元的功能是否按照预期工作,确保被测单元的代码能够正确地执行。

单元测试的特点•独立性:单元测试应该独立于其他部分的测试,只测试被测单元本身的功能。

•自动化:单元测试应该是自动化执行的,开发人员可以编写测试用例,并通过自动化工具进行批量测试。

•可重复性:单元测试应该是可重复的,确保每次测试结果都是一致的。

•及时性:单元测试应该尽早介入到开发过程中,发现问题并及时修复。

单元测试的流程单元测试通常包括以下几个步骤: 1. 编写测试用例:针对单个功能模块编写测试用例,包括输入数据、预期输出等。

2. 执行单元测试:使用自动化测试工具执行测试用例,检查被测单元的功能是否符合预期。

3. 分析测试结果:根据测试输出结果,分析代码中的问题和错误。

4. 修复问题:如果发现问题,开发人员应及时修复,并重新执行单元测试。

5. 循环迭代:持续地编写测试用例、执行测试、分析结果、修复问题,直到单元测试通过为止。

单元测试的优势单元测试具有以下优势: 1. 提高代码质量:通过单元测试可以发现代码中的问题,确保代码的正确性和稳定性。

2. 提高开发效率:单元测试可以帮助开发人员快速地定位和解决问题,提高开发效率。

3. 方便维护:单元测试可以减少代码修改带来的风险,方便后续的维护和修改工作。

4. 增强信心:通过单元测试验证代码的正确性,增强开发人员对系统的信心。

总结单元测试是确保软件质量的重要手段,它可以帮助开发人员发现问题并提高代码质量。

在软件开发过程中,开发人员应该重视单元测试,不断完善和优化测试用例,提高测试覆盖率,以确保软件系统的稳定和可靠性。

单元测试的重点和难点

单元测试的重点和难点

单元测试的重点和难点一、单元测试的重点在软件开发过程中,单元测试扮演着至关重要的角色。

单元测试是对软件中最小的可测试单元进行测试的过程,通过单元测试可以帮助确保代码的质量、可靠性和稳定性。

1.1 提高代码质量单元测试可以帮助开发人员及时发现代码中的bug和逻辑错误,从而提高代码的质量。

通过编写针对每个函数或方法的单元测试,可以确保每个功能模块的正确性,减少后期调试和维护的工作量。

1.2 辅助重构单元测试还可以辅助重构过程。

当开发人员对代码进行重构时,可以通过运行单元测试来验证重构后的代码是否仍然能够正常工作,从而确保重构不会引入新的bug。

1.3 促进团队协作编写单元测试可以促进团队成员之间的协作。

通过编写单元测试,团队成员可以清晰地了解功能模块的输入输出以及预期行为,从而更好地理解彼此的工作,提高团队的协作效率。

二、单元测试的难点虽然单元测试在软件开发中具有重要意义,但是在实际编写单元测试时常常会遇到一些难点。

2.1 依赖管理在实际项目中,很多模块会存在依赖关系,这就给单元测试带来了挑战。

当一个模块依赖于其他模块时,需要保证依赖模块的正确性,同时需要在单元测试中模拟这些依赖,这会增加单元测试的复杂性。

2.2 边界条件正确处理边界条件是单元测试中的一大难点。

开发人员需要考虑到各种边界情况,例如最大值、最小值、空值等,以确保代码在各种情况下都能够正确运行。

2.3 难以测试的代码有些代码可能很难进行单元测试,例如涉及到跨模块、跨系统、IO操作等情况。

这些代码往往会给单元测试带来困难,需要使用模拟技术或者其他方法来解决。

2.4 维护成本随着项目的不断演化和变更,单元测试也需要不断更新和维护。

当代码发生变更时,需要同时更新对应的单元测试,这会增加维护成本,尤其是在项目规模较大的情况下。

三、总结单元测试作为软件开发过程中的重要环节,既有着重要意义,又面临着一些难点和挑战。

开发人员应该充分认识到单元测试的重要性,努力克服各种难点,不断提升单元测试的质量和覆盖范围,从而保证软件质量和项目的成功实施。

单元测试常用测试方法

单元测试常用测试方法

单元测试常用测试方法一、概述单元测试是软件开发中的一种测试方法,用于测试软件系统中的最小可测试单元——单元。

在进行单元测试时,开发人员将一个个独立的模块或函数进行测试,以验证其功能的正确性。

本文将介绍一些常用的单元测试方法,以供开发人员参考。

二、黑盒测试黑盒测试是一种测试方法,它将被测试的单元看作一个黑盒子,只关心输入和输出,而忽略其内部实现。

黑盒测试方法主要包括等价类划分、边界值分析和错误推测等。

1. 等价类划分等价类划分是一种常用的黑盒测试方法,将输入条件划分为若干等价类,然后选择一部分测试用例进行测试。

这样可以有效地减少测试用例的数量,提高测试的效率。

2. 边界值分析边界值分析是一种针对边界条件进行测试的方法,它通过选择恰好位于边界的测试用例,以验证程序在边界条件下的行为是否正确。

例如,如果一个函数要求输入的数字在1到100之间,那么可以选择1和100作为测试用例。

3. 错误推测错误推测是一种通过测试错误情况来检查系统是否能够正确处理异常情况的方法。

开发人员可以尝试输入错误的参数或者执行错误的操作,以测试程序的鲁棒性和容错性。

三、白盒测试白盒测试是一种测试方法,它关注被测试单元的内部结构和实现细节。

常用的白盒测试方法包括语句覆盖、分支覆盖和路径覆盖等。

1. 语句覆盖语句覆盖是一种测试方法,它要求测试用例能够覆盖被测试单元中的每一条语句。

通过执行所有语句,开发人员可以检查程序的基本功能是否正确。

2. 分支覆盖分支覆盖是一种测试方法,它要求测试用例能够覆盖被测试单元中的每一条分支。

通过执行所有分支,开发人员可以检查程序在不同条件下的行为是否正确。

3. 路径覆盖路径覆盖是一种测试方法,它要求测试用例能够覆盖被测试单元中的每一条路径。

通过执行所有路径,开发人员可以检查程序的各种可能性和边界条件下的行为是否正确。

四、边界测试边界测试是一种测试方法,它主要关注被测试单元的边界条件。

通过选择接近边界的测试用例,开发人员可以测试程序在边界条件下的行为是否正确。

单元测试的主要内容是什么

单元测试的主要内容是什么单元测试是软件开发中非常重要的一个环节,通过对软件系统中的各个单元进行独立测试,验证其功能正确性和稳定性,从而保证整体系统的质量。

单元测试的主要内容包括以下几个方面:1. 测试用例设计单元测试的第一步是设计测试用例,即确定对于每个单元需要测试的输入数据和预期的输出结果。

测试用例应涵盖各种情况,包括正常情况、边界情况和异常情况,以确保被测试的单元覆盖尽可能多的情况。

好的测试用例能够有效地发现潜在的问题,提高测试的覆盖率。

2. 测试环境搭建在进行单元测试之前,需要搭建一个独立的测试环境,以确保测试时不会受到外部环境的影响。

测试环境通常包括测试框架、测试工具以及模拟测试数据等,以帮助测试人员快速、高效地进行测试工作。

3. 执行测试用例执行测试用例是单元测试的核心内容,通过执行设计好的测试用例,对被测试的单元进行验证。

测试人员需要关注测试结果是否符合预期,以及是否满足特定的测试标准或指标。

在执行过程中,需要记录测试过程中的各种信息,包括测试结果、执行时间等。

4. 分析测试结果分析测试结果是单元测试的最后一步,测试人员需要根据执行测试用例得到的结果,判断被测试单元的质量是否满足要求。

如果测试结果不符合预期,需要及时定位问题,分析原因,并进行修复和再次测试。

通过分析测试结果,可以及时发现和解决潜在的问题,提高软件的稳定性和可靠性。

结论通过以上几点内容,可以看出单元测试主要包括测试用例设计、测试环境搭建、执行测试用例和分析测试结果等几个方面。

只有全面、规范地进行单元测试,才能有效地提高软件系统的质量,保证系统的稳定性和可靠性,为软件开发提供有力的保障。

软件测试-模块(单元)测试

5.2 增量测试
增量测试
非增量测试
工作量小:使用前面测试过的模块来取代非增量测试中所需要的驱动模块或桩模块。
工作量较大:要设计驱动模块和桩模块
可以较早发现模块中与不匹配接口、不正确假设等编程错误。
到了测试过程的最后阶段,模块之间才能“互相看到”
容易进行调试,新出现的错误往往与最近添加的模块有关
直到整个程序组装之后,模块之间接口相关的错误才会浮现,难以定位
自顶向下的增量测试中的桩模块
A
显示跟踪信息
B
显示传递信息
01
02
D
根据输入返回一个值
C
返回一个值
03
04
第一步是测试E,J,G, K,L和I中的部分或全部模块,既可以串行也可以并行进行;需要设计驱动模块,有的驱动模块可以供几个测试模块使用 接着测试的模块序列有多种可能,如果接下来是测试较关键的模块F,H,则用它们代替相应的驱动模块,并加入它们的驱动模块,如图
目的
单元测试针对的问题
模块接口:检查进出单元的数据流是否正确 局部数据结构:测试内部数据是否完整?例如:不正确的类型说明,错误的初始化等。 路径测试:发现由于不正确的判定或不正常的控制流而产生的错误,例如:不正确的逻辑操作或优先级,不适当地修改循环变量。 边界条件:测试边界处程序是否正确工作? 出错处理:测试出错处理措施是否有效?例如:提供的错误信息不足,难以找到错误原因等。
J
Driver
Driver
L
K
I
Driver
F
Driver
D
Driver
H
自底向上的增量测试
自底向上的增量测试中的驱动模块
01
A
调用从属模块

单元测试与集成测试

单元测试与集成测试软件开发是现代计算机科学中的一个重要分支领域,其在工业界和学术界都有着广泛的应用。

随着软件规模和复杂度的不断提高,软件测试在软件工程中的地位也越来越重要。

软件测试可以分为几种不同的类型,其中单元测试和集成测试是软件测试中最基本的两种类型。

本文将探讨这两种测试的基本概念、区别以及在软件开发过程中的重要作用。

一、基本概念1、单元测试单元测试是指针对软件中最小的可测试单元的测试方法。

通常情况下,这个单元是指一个函数或者一个方法。

单元测试是在软件开发过程中最早出现的一种测试方法,其目的是保证编写的代码符合预想的设计需求。

单元测试的基本原则就是将一段代码的功能组合看成一个互相独立的单元进行单独测试。

一般来说,单元测试能够高效地发现代码中的错误,同时也能为后续测试提供依据。

2、集成测试集成测试是指在将多个单元测试中的代码组合在一起形成系统之后,针对整个软件系统进行测试的方法。

集成测试主要是为了测试软件系统的各个组件之间的协作和配合是否正常,以及检验其能否完成预期的操作。

通常情况下,集成测试在软件开发流程的后期进行,一般是在系统测试之前进行的。

二、区别和联系单元测试和集成测试在测试的对象和范围上有着明显的差别。

单元测试的测试范围非常狭窄,只是针对代码中一个函数或方法进行测试。

而集成测试则是对整个软件系统进行测试,只有当多个单元之间的协作关系完全形成,才去进行集成测试。

除此之外,在测试的目的上也有着一定的区别。

单元测试主要是为了保证代码的正确性,发现代码中的bug,而集成测试则主要是为了保证系统的稳定性和健壮性,测试各个组件之间的协作,以及检验整个软件系统的功能性。

同时,它们也有着一定的联系。

单元测试是集成测试的前提,只有在单元测试中发现并解决了代码中的问题,才能够保证集成测试的顺利进行。

集成测试和单元测试各自又有所不同,但是两者却都是系统测试的组成部分。

三、在软件开发中的重要性单元测试和集成测试都有着举足轻重的地位,在软件开发中的重要性无法被忽视。

单元测试与集成测试

单元测试与集成测试软件测试是软件开发过程中不可或缺的一环。

在软件测试中,单元测试和集成测试是两个重要的测试阶段。

它们各自有不同的目的和方法,但都对保证软件质量起到了关键作用。

一、单元测试单元测试是指对软件中的最小可测试单位进行的测试。

这个最小可测试单位通常是一个函数、一个模块或者一个类。

单元测试的目的是验证每个单元是否按照设计要求正确地工作。

在进行单元测试时,我们需要按照以下步骤进行:1. 设计测试用例: 根据单元的功能和需求,设计一系列的测试用例,涵盖各种可能的输入和边界条件。

2. 编写测试代码: 根据测试用例,编写相应的测试代码来模拟输入和验证输出结果。

3. 执行测试: 运行测试代码,观察单元是否按照预期工作,并记录测试结果。

4. 分析结果: 对测试结果进行分析,确定是否有错误或异常情况,并修复问题。

通过单元测试,我们可以尽早地发现和修复单元中的错误,从而提高整个软件系统的稳定性和可靠性。

二、集成测试集成测试是指将单元测试通过后的模块进行组合,并进行整体的测试。

集成测试的目的是验证系统各个模块之间的交互是否正确,以及验证整体功能是否符合设计要求。

在进行集成测试时,我们需要按照以下步骤进行:1. 制定集成测试计划: 根据系统的架构和设计,确定集成测试的范围和目标。

2. 配置测试环境: 搭建测试环境,包括硬件、软件和网络等。

3. 设计集成测试用例: 根据系统需求和交互关系,设计一系列的集成测试用例。

4. 执行集成测试: 运行集成测试用例,观察系统各模块之间的交互是否正常,并记录测试结果。

5. 分析结果: 对测试结果进行分析,确定是否存在交互错误或功能缺陷,并进行修复。

通过集成测试,我们可以保证各个模块的交互正确性,发现和解决模块之间的集成问题,确保系统整体功能的稳定和一致性。

总结:单元测试和集成测试是软件测试过程中的两个重要阶段。

单元测试主要针对最小可测试单位进行测试,验证每个单元的功能是否正确;而集成测试将各个单元进行组合,并测试系统整体的交互和功能。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

EasyMock与Junit的集成测试
(1)
EasyMock 是一套通过简单的方法对于指定的接口或类生成Mock 对象的类库,它能利用对接口或类的模拟来辅助单元测试。

Mock 方法是单元测试中常见的一种技术.
主要作用:
模拟一些在应用中不容易构造或者比较复杂的对象,比如HttpServletRequest、Connection等,从而把测试与测试边界以外的对象隔离开,真正的形成“单元测试”,专心测试业务逻辑(各个业务分支,即各个if..else),而不会因为依赖对象对测试产生影响。

主要应用场合:
一般来说,
1.对于目标对象中的合作者对象,在测试时如果其状态或行为的实现严重地依赖外部资源.比如:
数据库连接操作-->依赖数据库连接
request请求-->依赖用户发送请求
负责发送电子邮件的类-->依赖外部触发
2.
或者团队并行开发时,目标对象的合作者对象并没有实现.比如
J2EE 中,横向分工时,
负责Action 的调用Service -->若相应的Service没有实现
负责Service 调用DAO 时,-->若相应的Service没有实现,
这些我们就需要模仿这些类。

对于DAO层的测试--spring textContext来进行
说明:
可以看到的是,在Service 层与Web 层,Mock 对象能很好的被应用。

有人觉得在Persistence 层也应该使用Mock 对象,但就像我们所知道的,在使用Hibernate 、Ibatis 等ORM 工具的情况下,我们的Persistence 层的测试主要测试的就是那些配置文件、查询语句等.这时,最好是采用spring的测试框架testcontext,让其测试用例可以在不启动容器的情况下,为用例加载hibernate/ibatis/spring的配置文件,直接测试这些配置文件及数据库操作。

(2)
重要的概念
1.
在一个完整的测试过程中,一个Mock 对象将会经历两个状态:Record 状态和Replay 状态。

Mock 对象一经创建,它的状态就被置为Record。

在Record 状态,用户可以设定Mock 对象的预期行为和输出,这些对象行为被录制下来,保存在Mock 对象中。

2.
将Mock 对象切换到Replay 状态
在调用replay() 方法之前的状态,EashMock 称之为“record 状态” 。

该状态下,Mock 对象不具备行为(即模拟接口的实现),它仅仅记录方法的调用。

在调用replay() 后,它才以Mock 对象预期的行为进行工作,检查预期的方法调用是否真的完成。

在使用Mock 对象进行实际的测试前,我们需要将Mock 对象的状态切换为Replay。

在Replay 状态,Mock 对象能够根据设定对特定的方法调用作出预期的响应。

将Mock 对象切换成Replay 状态有两种方式,您需要根据Mock 对象的生成方式进行选择。

如果Mock 对象是通过org.easymock.EasyMock 类提供的静态方法createMock 生成的(第1节中介绍的第一种Mock 对象生成方法),那么EasyMock
类提供了相应的replay 方法用于将Mock 对象切换为Replay 状态:
replay(mockResultSet);
如果Mock 对象是通过IMocksControl 接口提供的createMock 方法生成的(第1节中介绍的第二种Mock对象生成方法),那么您依旧可以通过IMocksControl 接口对它所创建的所有Mock 对象进行切换:control.replay();
3.
对Mock 对象的行为进行验证
在利用Mock 对象进行实际的测试过程之后,我们还有一件事情没有做:对Mock 对象的方法调用的次数进行验证。

为了验证指定的方法调用真的完成了,我们需要调用verify 方法进行验证。

和replay 方法类似,您需要根据Mock 对象的生成方式来选用不同的验证方式。

如果Mock 对象是由
org.easymock.EasyMock 类提供的createMock 静态方法生成的,那么我们同样采用EasyMock 类的静态方法verify 进行验证:
verify(mockResultSet);
如果Mock对象是有IMocksControl 接口所提供的createMock 方法生成的,那么采用该接口提供的verify 方法,例如第1节中的IMocksControl 实例control:
control.verify();
需要注意的地方:
1.EasyMock 类的createControl 方法能创建一个接口IMocksControl 的对象,该对象能创建并管理多个Mock 对象。

如果需要在测试中使用多个Mock 对象,我们推荐您使用这一机制,因为它在多个Mock 对象的管理上提供了相对便捷的方法。

2.如果您要模拟的是一个具体类而非接口,那么您需要下载扩展包EasyMock Class Extension 2.2.2。

在对具体类进行模拟时,您只要用org.easymock.classextension.EasyMock 类中的静态方法代替org.easymock.EasyMock 类中的静态方法即可。

3.在一个完整的测试过程中,一个Mock 对象将会经历两个状态:Record 状态和Replay 状态。

Mock 对象一经创建,它的状态就被置为Record。

在Record 状态,用户可以设定Mock 对象的预期行为和输出,这些对象行为被录制下来,保存在Mock 对象中。

(3)
1、使用EasyMock的大体步骤
A.使用EasyMock 生成Mock 对象;
单个的Mock对象,利用静态导入EasyMock,通过createMock(interfaceName.class)
多个Mock对象,通过ImocksControl管理。

IMocksControl control = EasyMock.createControl();
java.sql.Connection mockConnection = control.createMock(Connection.class);
java.sql.Statement mockStatement = control.createMock(Statement.class);
B.根据测试目的,设定Mock 对象的预期行为和输出;
如以下各实例:
测试数据库查询-登录失败:则设置预期为:expect(rs.next()).andReturn(false);
servlet判断用户信息登录失败:则设置预期为:
expect(request.getParameter("password")).andReturn("pass");
即登录不对,从而测试登录判断失败的业务分支
所有实际代码执行的方法,都必须“录制”。

-->重要!
C.将Mock 对象切换到Replay 状态
单个Mock:replay(mockObj)
多个Mcok:control.replay()
D.利用Mock 对象方法进行实际单元测试;
String res = login.login(conn, name, pas); //con是一个Connection的Mock对象E.对Mock 对象的行为进行验证。

单个Mock:verify(mockObj)
多个Mock:control.verify()
三实例:(请见附件)
db连接的login测试
servlet请求测试
ssh中的service层测试
v。

相关文档
最新文档