系统单元测试规范-4:JAVA单元测试指引

合集下载

java 单元测试 mock方法

java 单元测试 mock方法

java 单元测试 mock方法Java 单元测试:Mock 方法介绍在 Java 开发中,单元测试是非常重要的一环。

当我们进行单元测试时,有时候需要模拟一个方法的行为,使得测试更加灵活和可控。

在 Java 中,我们可以使用 Mock 方法来实现这个目的。

什么是 Mock 方法Mock 方法是指在单元测试中,通过一种方式替代真实的方法实现,使得我们可以在测试时模拟不同的情况。

通过 Mock 方法,我们可以精确地控制方法的返回值、抛出异常等。

Mockito 框架Mockito 是一个流行的 Java Mock 框架,它提供了丰富的 API来进行方法的模拟。

下面介绍一些常用的 Mockito 方法:1. mock()mock()方法用于创建一个模拟对象,并设置默认的行为。

示例如下:List<String> mockedList = ();2. when()when()方法用于配置模拟对象的方法行为。

我们可以使用when()方法指定方法的返回值或抛出异常。

示例如下:when((0)).thenReturn("Mockito");when((1)).thenThrow(new RuntimeException());3. verify()verify()方法用于验证模拟对象的方法是否被调用,以及调用的次数。

示例如下:verify(mockedList).get(0);verify(mockedList, times(2)).add("Mock");4. any()any()方法用于匹配任意参数。

示例如下:when((anyInt())).thenReturn("Element");PowerMock 框架在某些情况下,Mockito 无法 Mock 静态方法、私有方法等场景,这时可以使用 PowerMock 框架。

1. @PrepareForTest@PrepareForTest注解用于指定需要 Mock 的类。

java单元测试方法

java单元测试方法

java单元测试方法Java是一门广泛应用于企业级应用领域的编程语言,为确保Java应用程序的质量和稳定性,单元测试是不可或缺的一部分。

单元测试可以验证代码的正确性和可用性,并可以在代码更改时提供反馈和更快的发布周期。

在本文中,将探讨Java单元测试的一些方法。

一、测试驱动开发(TDD)测试驱动开发是一种基于测试的开发方法,开发者先编写测试用例,然后编写代码以使测试用例通过。

这种方法可以帮助开发者集中注意力并确保他们编写的代码满足预期的行为。

使用TDD方法编写的代码更加健壮,可维护性更强,因为它们已经被证明在过程中通过测试。

二、JUnit框架JUnit是一个流行的Java测试框架,可帮助我们编写和执行单元测试。

JUnit有助于开发人员编写测试用例并自动化运行它们。

它还可以生成报告和覆盖率信息,以便开发人员可以快速发现不良代码。

三、断言和异常测试断言和异常测试是用于验证代码正确性和可用性的重要工具。

断言用于检查代码的输出是否符合预期,如果不符合预期,则将在运行时引发一个异常。

异常测试用于检查代码是否按预期处理异常情况,以便确定它是否可以处理各种情况。

四、模拟和桩在Java中,模拟和桩是用于创建虚拟对象或环境的一种常见技术。

模拟用于模拟依赖项(例如数据库或网络)的行为,这些依赖项可能无法在测试环境中使用。

桩通常用于模拟一些不可用的对象或行为,以便您可以测试您的代码如何处理这些条件。

五、覆盖率测试代码覆盖率是测试中一项重要的指标,它描述对源代码执行的测试的覆盖程度。

通过对代码进行行覆盖和分支覆盖等方式来确定测试覆盖率。

这些指标可用于确定代码的质量和可靠性,并可以帮助开发者识别代码错误或潜在的性能问题。

Java单元测试可以大大提高代码的质量和稳定性,以及在开发过程中减少更正时间的成本。

以上提到的一些方法可帮助开发者编写更好的代码,并保证其在随后的集成中不会出现问题。

java单元测试方法

java单元测试方法

java单元测试方法
Java单元测试是一种测试方法,它用于测试Java代码的单独功能或模块,以确保其正常运行。

Java单元测试通常使用JUnit框架进行测试。

在Java单元测试中,测试用例通常按照一定的顺序排列,并在每个测试用例中执行一些特定的Java代码。

这些测试用例可以通过JUnit框架进行自动化测试,并在测试结果中提供详细的报告。

Java单元测试可以提供以下的好处:
1. 提高代码质量:Java单元测试可以及早检测代码中的错误,从而提高代码的质量。

2. 减少代码维护成本:Java单元测试可以帮助开发人员快速发现代码中的问题,从而减少代码维护的成本。

3. 提高开发效率:Java单元测试可以帮助开发人员快速发现问题并进行修复,从而提高开发效率。

4. 提高软件可靠性:Java单元测试可以帮助开发人员及早发现软件中的问题,并进行修复,从而提高软件的可靠性。

总之,Java单元测试是一种非常重要的软件测试方法,它可以帮助开发人员提高代码质量、减少维护成本、提高开发效率和提高软件可靠性。

- 1 -。

单元测试的规范

单元测试的规范

单元测试的规范单元测试是软件开发过程中一个非常重要的环节,它用于验证程序的各个单元是否按照设计要求正常运行。

为了确保单元测试的有效性和可靠性,开发人员需要遵循一些规范。

本文将介绍单元测试的规范,并提供一些实用的建议。

1.选择合适的单元:在进行单元测试之前,首先需要明确测试的目标单元。

一个单元应该是最小可测试的功能模块,通常是一个函数、方法或者一个类。

确保每个单元都能够独立于其他部分进行测试,这样可以更容易地定位和修复问题。

2.编写清晰的测试用例:每个单元测试都应该有明确的测试目标和预期结果。

测试用例应该覆盖各种情况,包括正常输入、边界条件和异常情况。

编写清晰的注释和描述,以便其他开发人员可以轻松理解测试的意图和预期结果。

3.保持测试独立和可重复:单元测试应该是独立的,不依赖于其他测试或外部环境。

确保每个测试用例可以独立运行,并输出可重复的结果。

这样可以帮助开发人员追踪问题和调试代码。

如果测试依赖于外部资源或环境,可以使用模拟工具或框架来模拟这些依赖项。

4.测试覆盖率:测试覆盖率表示在单元测试中覆盖了多少代码。

在编写测试用例时,应该努力达到较高的测试覆盖率,尽可能覆盖程序的各个部分。

通过使用代码覆盖率工具,可以检查哪些部分的代码没有被测试到,进而补充相应的测试用例。

5.单元测试的独立环境和频率:为了确保单元测试的准确性和可靠性,应该为单元测试提供一个独立的测试环境。

这个环境应该与实际生产环境相似,但又能够独立进行测试。

此外,频繁地运行单元测试可以及早发现问题,并在开发过程中进行修复。

6.错误处理和断言:在编写测试用例时,应该考虑到各种可能的错误情况,并编写相应的错误处理和断言。

检查程序是否按照预期处理错误,并产生正确的结果。

错误处理和断言帮助开发人员追踪问题和定位错误的源头。

7.持续集成和测试:单元测试应该与持续集成过程结合,以确保在每次代码提交后都进行自动化的单元测试。

持续集成工具可以自动运行测试,并及时通知开发人员有关测试结果的信息。

单元测试规范

单元测试规范

单元测试规范1. 引言单元测试是软件开发流程中的重要环节,它可以帮助开发人员验证代码的正确性,确保软件系统的稳定性和可靠性。

本文档旨在规范单元测试的实施和管理过程,以确保测试的准确性和有效性。

2. 单元测试的定义单元测试是对软件系统中最小可测试单元的测试,通常是对一个函数、方法或类的测试。

单元测试应该具备独立性、可重复性、可自动化和确定性。

3. 单元测试的目标单元测试的主要目标是验证代码的正确性、发现并修复潜在的bug,以及提高代码的可维护性和可扩展性。

同时,单元测试还可以帮助开发人员更好地理解代码逻辑、减少调试时间和提高开发效率。

4. 单元测试的原则4.1 单一职责原则:每个单元测试应该只验证一个功能或一个场景,避免在一个测试用例中包含多个测试。

4.2 边界测试原则:对于边界条件和特殊情况进行单独测试,以覆盖代码的所有可能情况。

4.3 可读性原则:单元测试代码应该易于阅读和理解,需要注释和清晰的命名规范。

4.4 可维护性原则:单元测试代码应该易于维护,当代码发生变化时,相关的单元测试也应该更新。

4.5 测试用例覆盖率原则:尽可能覆盖所有可能的测试场景,特别是边界条件和异常情况。

5. 单元测试的工具和框架常用的单元测试工具和框架有:•JUnit:Java语言的单元测试框架,用于编写和运行Java代码的单元测试。

•pytest:Python语言的单元测试框架,具有简单易用、自动发现测试、丰富的断言库等特点。

•NUnit:.NET平台的单元测试框架,用于测试C#和代码。

•Mocha:JavaScript语言的单元测试框架,可用于测试Node.js和浏览器端的代码。

选择合适的单元测试工具和框架可以提高测试效率和覆盖率,减少测试代码的编写和维护成本。

6. 单元测试的编写规范6.1 测试命名规范:测试方法的命名应该具备描述性,清晰地表达被测试代码的功能和场景。

采用驼峰命名法,以test_开头,例如:test_addition。

单元测试规范

单元测试规范

单元测试规范单元测试是一个项目质量好坏的关键,做好单元测试是项目能够顺利进行联调测试、系统测试、用户测试的前提;单元测试对项目成败有着重要的影响!单元测试的方法和工具:JUnit/DBunit/Cactus/Ejb3UnitStruts/TestCase for JUnit /HttpUnit/JsUnit等;单元测试的方法很多,JUnit是最基本,相对简单的一种方法,下面以Junit 为例介绍单元测试,希望每个人都能按如下步骤去执行:1.数据库单元测试指南1.1.测试代码的包结构暂时我们对于测试代代码的包结构做了如下的要求:1)首先为了把测试代码和开发代码分离,我们单独为测试代码建立一个代码文件夹(source folder)取名为test。

2)但是又为了能兼顾测试类和源类(需要进行测试的类)的关系,我们规定测试类的包结构与源类的包结构保持一致。

3)另外还涉及到种子文件(seed文件),我们暂时规定种子文件位于测试类同一个包下。

当然如果一个测试类对应的种子文件比较多(为个别方法建立单独的种子文件)的话,可以建立子包来存储。

4)其更新类的API他,如有特殊情况,可按具体情况做调整。

包结构示例图:1.2.对于各种类型方法的测试策略为了能够更具体形象描述测试流程,我们举个具体的实例:<?xml version='1.0' encoding='UTF-8'?><dataset><OWK.MBranch ORGCODE="6666" ORGNAME="测试6" ORGREGION="" ORGSN="CS"ORGTYPE="1" PARENTORGID="9999" MANAGERUSERID="admin"MANAGERTIME="20091016151330" STATUS="1" ORGNODESN="10,992" RESERVE1=""RESERVE2="" RESERVE3="" RESERVE4="" LEADERUSERID="zhang"ONEORGTYPE="1" VIEWORDER="1" INORGID="9999" TIMERESERVE1=""TIMERESERVE2="" STATUSRESERVE1="" STATUSRESERVE2="" DATERESERVE1=""DATERESERVE2="" INTRESERVE1="0" INTRESERVE2="0" MONEYRESERVE1="0"MONEYRESERVE2="0" INFORESERVE1="" INFORESERVE2="" REMARKRESERVE1=""REMARKRESERVE2="" /><OWK.MBranch ORGCODE="66661" ORGNAME="测试61" ORGREGION="" ORGSN="CS"ORGTYPE="11" PARENTORGID="6666" MANAGERUSERID="admin"MANAGERTIME="20091016151417" STATUS="1" ORGNODESN="10,992,1"RESERVE1="" RESERVE2="" RESERVE3="" RESERVE4="" LEADERUSERID="admin"ONEORGTYPE="1" VIEWORDER="1" INORGID="6666" TIMERESERVE1=""TIMERESERVE2="" STATUSRESERVE1="" STATUSRESERVE2="" DATERESERVE1=""DATERESERVE2="" INTRESERVE1="0" INTRESERVE2="0" MONEYRESERVE1="0"MONEYRESERVE2="0" INFORESERVE1="" INFORESERVE2="" REMARKRESERVE1=""REMARKRESERVE2="" /><OWK.MBranch ORGCODE="666611" ORGNAME="测试611" ORGREGION=""ORGSN="CS" ORGTYPE="2" PARENTORGID="6666" MANAGERUSERID="admin"MANAGERTIME="20091016151445" STATUS="1"ORGNODESN="10,992,1,1"RESERVE1="" RESERVE2="" RESERVE3="" RESERVE4="" LEADERUSERID="admin"ONEORGTYPE="2" VIEWORDER="1" INORGID="66661" TIMERESERVE1=""TIMERESERVE2="" STATUSRESERVE1="" STATUSRESERVE2="" DATERESERVE1=""DATERESERVE2="" INTRESERVE1="0" INTRESERVE2="0" MONEYRESERVE1="0"MONEYRESERVE2="0" INFORESERVE1="" INFORESERVE2="" REMARKRESERVE1=""REMARKRESERVE2="" /><OWK.MUSER_EXT USERID="zhang" USERNAME="张三" SEX="f" TEL="" FAX=""EMAIL="" BRANCHID="6666" SUBBRANCHID="666611" LEVEL="1" CMBID=""INBRANCHID="0010" /><OWK.MUSER_EXT USERID="admin" USERNAME="超级管理员" SEX="m" TEL="" FAX=""EMAIL="" IDNO="" BRANCHID="9999" SUBBRANCHID="9999" LEVEL="1"CMBID=" " INBRANCHID="" /><OWK.MUSER_EXT USERID="hradmin" USERNAME="人力资源管理员" SEX="m" TEL=""FAX="" EMAIL="" BRANCHID="6666" SUBBRANCHID="666611"LEVEL="1"RESERVE1="" RESERVE2="" RESERVE3="" INBRANCHID="0010" /> <OWK.MUSER_BASE USERID="zhang"PASSWD="96E79218965EB72C92A549DD5A330112"REGTIME="20091016151122"STATUS="1" ALLOWIPS="" BLOCKIPS="" LASTLOGINIP="127.0.0.1"LASTLOGINTIME="2009-10-16" ERRLOGINNUM="0"MODIFYUSERID="hradmin"MODIFYDATETIME="20091016151122" /><OWK.MUSER_BASE USERID="admin"PASSWD="96E79218965EB72C92A549DD5A330112"REGTIME="20061010103000"STATUS="1" ALLOWIPS="127.0.0.1,99.1.95.109"LASTLOGINIP="127.0.0.1"LASTLOGINTIME="2009-10-16" ERRLOGINNUM="59" /> <OWK.MUSER_BASE USERID="hradmin"PASSWD="96E79218965EB72C92A549DD5A330112"REGTIME="20091016150811"STATUS="1" LASTLOGINIP="127.0.0.1"LASTLOGINTIME="2009-10-16"ERRLOGINNUM="0" MODIFYUSERID="admin"MODIFYDATETIME="20091016150811" /></dataset>1.2.1.查询类的方法对于查询类的方法,他们有一些共同点:都不会改变数据库的内容,目的都是返回相关的数据。

单元测试规范

单元测试规范

单元测试规范单元测试规范一、概述单元测试是软件开发过程中的一项重要活动,通过对程序的每个独立单元进行测试,可以确保每个单元的功能和性能符合预期。

单元测试规范是为了规范单元测试的实施和管理,提高测试的效率和质量。

二、测试环境1. 清理环境:在执行每个单元测试前,要确保测试环境的干净和稳定,删除测试文件和目录,清空缓存等。

2. 隔离环境:每个单元测试应该在独立的环境中执行,不受其他单元测试的影响。

三、编写测试用例1. 准确定义测试目标:每个单元测试应该明确定义测试目标,并列出测试用例。

2. 覆盖率要求:测试用例应该尽可能覆盖程序的各个分支和路径。

3. 输入数据:测试用例的输入数据应该包含正常情况、边界情况和异常情况。

4. 期望结果:测试用例应该明确定义期望的输出结果。

5. 测试用例命名:测试用例的命名应该简洁明了,能够准确描述测试目的和输入数据。

6. 测试用例的注释:测试用例应该包含详细的注释,解释测试目的、输入数据和期望结果。

四、编写测试代码1. 测试代码命名:测试代码的命名应该与被测代码的命名规范一致,并在其后加上“Test”后缀。

2. 单一职责:每个测试函数应该只测试一个功能点,保持测试函数的简洁和可维护性。

3. 模块化设计:测试代码应该模块化设计,将一组相关的测试函数放在同一个模块中。

4. 代码复用:如果多个测试函数有相同的测试步骤和数据准备工作,可以抽出公共的代码,减少重复的劳动。

5. 错误处理:测试代码应该能够捕获和处理测试中可能出现的错误和异常。

五、执行测试1. 自动化执行:建议使用自动化测试工具执行测试,可以提高测试效率和减少人为出错。

2. 执行顺序:测试用例的执行顺序应该遵循依赖关系,先执行低级别的单元测试,再执行高级别的单元测试。

3. 记录执行结果:对于每个测试用例,应该记录其执行结果、耗时和覆盖率等指标,以便后续分析和比较。

六、结果分析1. 判断测试结果:根据测试用例的期望结果和实际输出结果,判断测试是否通过。

单元测试规范文档

单元测试规范文档

单元测试规范文档1. 引言在软件开发过程中,单元测试是一个重要的环节。

它用于验证软件的基本组成部分,确保其功能的正确性和可靠性。

本文档旨在规范单元测试的实施,以确保测试的全面性和一致性。

2. 目标单元测试的目标是验证每个软件单元的正确性。

通过单元测试,可以及早发现和解决软件开发过程中存在的问题,提高代码的质量和稳定性。

3. 测试环境为了能够有效地执行单元测试,需要建立适当的测试环境。

测试环境应包括以下组成部分:3.1 开发环境:确保开发人员拥有适当的开发环境,其中包括所需的开发工具、编译器和调试器等。

3.2 测试框架:选择合适的测试框架来支持单元测试的执行,例如JUnit、PyTest等。

3.3 测试数据:准备相应的测试数据和测试用例,以覆盖各种输入和场景。

4. 测试策略为了确保测试的全面性,需要制定适当的测试策略。

以下是一些常用的测试策略:4.1 边界值测试:针对输入参数的边界情况进行测试,如最小值、最大值以及边界附近的值。

4.2 异常情况测试:测试软件在异常输入或错误情况下的行为,如输入为空、输入非法字符等。

4.3 正常情况测试:测试软件在正常输入情况下的行为,验证其功能的正确性。

4.4 性能测试:测试软件在各种负载下的性能表现,如响应时间、吞吐量等。

5. 测试过程为了保证测试的一致性和可追溯性,需要遵循以下测试过程:5.1 编写测试用例:根据需求和设计文档,编写相应的测试用例,包括输入数据、期望输出和预期行为等。

5.2 执行测试用例:执行编写好的测试用例,并记录测试结果和问题。

5.3 分析测试结果:根据测试结果和问题,进行问题分析和定位,以便及时解决和修复问题。

5.4 回归测试:在软件发生变更后,重新执行之前的测试用例,确保修改不会影响原有功能。

5.5 测试报告:根据测试结果和分析,撰写测试报告,包括测试覆盖率、问题汇总和解决情况等。

6. 问题管理在测试过程中,可能会出现一些问题或缺陷。

为了及时解决这些问题,需要建立问题管理机制,包括以下步骤:6.1 问题记录:对于发现的问题,要及时记录并分配给负责人进行处理。

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

JAVA单元测试指引
1.背景
系统的规模及复杂度与时间及业务的拓展成正比。

随着系统的规模不断变大,各子系统内的业务逻辑的新增,系统的代码总数也在不断的增加。

部分业务在时间的推移上会发生变化引起系统在代码层面上的重构,系统代码在软件工程的生命周期中不断的迭代和变化。

代码的新增以及重构都需要通过严格测试才能部署上线,公司目前对于上线功能采取的多数是黑盒测试,并未使用白盒测试对研发人员编写的代码进行更高的覆盖测试。

而研发人员平时在功能开发完成后进行自测的时候使用的方式也因为个人喜好或各种原因没有形成统一。

因此,系统若能在编译、部署、上线的时候能够对所有功能都进行尽可能全面的白盒测试将会有助于降低系统在升级过程中的故障率,提高系统升级的速度。

若能够通过更全面的测试发现代码中的隐藏缺陷,便能提升代码的健壮性,使系统在长期运行中发生更少的问题。

2.需求
研发人员在功能开发结束之后应当同时提交该功能的单元测试用例代码,并且该单元测试用例代码需要满足以下几点需求:
2.1.功能覆盖
1)每个单元测试代码中需要覆盖该功能的所有输入和输出,并对输出进行校验。

2)最终目标每个系统的所有测试用例代码需要覆盖系统的所有功能。

(存量系统在后续分
阶段补充)
2.2.测试颗粒化
1)单元测试用例只测试小颗粒的功能。

2)一个单元测试用例只涉及到一个被测模块,避免牵扯到太多的模块。

2.3.测试自动化
1)单元测试的输入,输出以及校验全部自动化,不需要人工干预。

2)系统编译的时候需要自动将所有单元测试执行一次,任意单元测试不通过不允予通过发
布。

2.4.持续维护
1)新添加的功能和模块需要添加相对应的单元测试用例。

2)重构或业务逻辑变更涉及到的功能和模块代码变化需要更新相对应的单元测试用例。

3.方案
基于公司在JAVA语言方面多数系统是采用Maven进行构建的现状以及Maven在系统构建的优势,故采用Maven进行系统构建+Junit进行用例测试的方案实现。

研发人员可以借助Cobertura对自己编写的测试用例进行代码覆盖分析,以便对测试代码进行调整和优化。

3.1.Maven
1)Maven不仅仅能构建项目,同时还是一个依赖管理工具,一个项目管理工具,提供中央
仓库帮助我们自动下载构件,也允许我们上传自己开发的jar包供各系统使用,这些都
是自动化的非常方便。

2)Maven提供的免费中央仓库涵盖了非常非常多的开源库,能满足绝大多数系统的使用需
求。

3)Maven对于目录结构有要求,约定优于配置,项目间切换就省去了学习成本。

4)Maven项目对单元测试支持很友好,约定的test目录用来编写单元测试代码,maven
在进行系统编译的时候自动执行test目录里测试用例,一旦出现用例不通过maven自动打包发布。

5)Maven构建的系统默认集成了Junit单元测试工具。

3.2.Junit
1)简单易用的单元测试工具,通过断言校验期望值与实际值的差异。

2)支持图形交互,测试结果简洁明了。

3)提供异常堆栈方便跟踪错误代码。

3.3.JaCoCo
1)简介
JaCoCo是一个开源的覆盖率工具(官网地址:/JaCoCo/ ),它针对的开发语言是java,其使用方法很灵活,可以嵌入到Ant、Maven中;可以作为Eclipse 插件,可以使用其JavaAgent技术监控Java程序等等。

2)覆盖率概况
标示绿色的为行覆盖充分,标红色的为未覆盖的行,黄色菱形的为分支部分覆盖,绿色菱形为分支完全覆盖。

3)JaCoCo的使用方式:
➢Apache Ant方式
Task coverage、Task agent、Task dump、Task merge、Task report、Task instrument
➢命令行方式
使用方式说明:
主要放在JAVA_OPTS中,比如:
由AgentOptions的getVMArgument方法加载,各参数入AgentOptions的对应参数,为后续操作做为输入。

系统在jvm停止的时候会dump覆盖率信息。

➢Apache Maven方式
(1)项目已jar包方式打包,引入junit和jacoco。

(2)Build时执行instrument、report、check。

(3)覆盖率生成到target/jacoco.exec
4.测试覆盖
4.1.代码覆盖度
单元测试中对每个被测逻辑体内的代码覆盖有以下几种方法,其覆盖的程度按照顺序递增。

这里借助一个示例对覆盖方法做一个简单的说明,供各位进行参考。

假定被测逻辑入下图(长方形内为代码语句):
4.1.1.语句覆盖
语句覆盖是最起码的结构覆盖要求,语句覆盖要求设计足够多的测试用例,使得程序中每条语句至少被执行一次。

对应的用例如下:
4.1.2.分支(判定)覆盖
它要求设计足够多的测试用例,使得程序中每个判定至少有一次为真值,有一次为假值,即:程序中的每个分支至少执行一次。

每个判断的取真、取假至少执行一次。

对应的用例如下:
4.1.3.条件覆盖
条件覆盖要求设计足够多的测试用例,使得判定中的每个条件获得各种可能的结果,即每个条件至少有一次为真值,有一次为假值。

对应的测试用例如下:
4.1.4.分支(判定)-条件覆盖
判定-条件覆盖就是设计足够的测试用例,得使判断中每个条件的所有可能取值至少执行一次,同时每个判断本身所有可能结果也至少执行一次。

对应的测试用例如下:
4.1.
5.条件组合覆盖
要求设计足够多的测试用例,使得每个判定中条件结果的所有可能组合至少出现一次。

满足“条件组合覆盖”的测试用例是一定满足“判定覆盖”、“条件覆盖”和“判定/条件覆盖”的。

对应的测试用例如下:
4.1.6.路径覆盖
路径覆盖的含义是,选取足够多的测试数据,使程序的每条可能路径都至少执行一次(如果程序图中有环,则要求每个环至少经过一次)。

对应的测试用例如下:
4.2.原则
由于根据程序的逻辑复杂程度以及程序设计上的差异性,某些代码想要完成特定的测试覆盖几乎是无法完成的,所以原则上不要求所有测试用例都能完成最高的代码覆盖度。

因此在条件允许的情况,尽量完成更高的测试覆盖度,最低要求是语句覆盖。

5.建议执行规范
考虑到规范的的复杂度与实施效果不成正比的关系,在单元测试方案的规范中只取最核心的几项进行规范化以便降低实施的难度的同时提高交付的系统的质量。

5.1.提交test测试包
Maven项目在main目录同级下默认了一个test包用于存放测试代码以及测试用配置文件,maven项目所编写的所有测试用代码和配置文件必须提交到SVN。

5.2.每个模块或类提交对应的测试类
每个模块或服务类有对应同名的测试类。

测试类中每个方法只进行一项最简单的单元测试,并且测试的方法必须有含义且与测试的逻辑相符合。

5.3.测试用例至少达到语句覆盖
编写测试代码的研发人员需要使用Cobertura或其他工具自检提交的单元测试代码,最低要求测试的覆盖率达到语句覆盖级别。

5.4.系统编译时需要执行所有测试类
编译机进行系统编译打包的时候需要执行test包底下的所有测试用例,必须所有测试用例都通过才允许打包部署。

6.实施
6.1.新项目
新项目采用maven构建,并且系统在生命周期内按照规范持续交付产出。

6.2.旧项目
6.2.1.Maven项目
逐步补充提交模块和服务类的单元测试用例,新增功能同时产出测试用例代码。

6.2.2.非maven项目
添加test测试包,逐步补充提交模块和服务类的单元测试用例,新增功能同时产出测试用例代码。

Ant编译打包时需要将test包下的所有单元测试执行一次,全部通过方可打包部署。

相关文档
最新文档