`

为什么要编写单元测试?原因是单元测试有不少的优点

阅读更多
为什么要编写单元测试?原因是单元测试有不少的优点,能够给我们的工作带来很大的帮助。
单元测试的优点

    1.帮助开发人员编写代码,提升质量、减少bug。如果大家分析一下我们bug原因的构成,我想有会有一部分bug的原因是开发人员在编写工作代码的时候没有考虑到某些case或者边际条件。造成这种问题的原因很多,其中很重要的一个原因是我们对工作代码所要完成的功能思考不足,而编写单元测试,特别是先写单元测试再写工作代码就可以帮助开发人员思考编写的代码到底要实现哪些功能。例如实现一个简单的用户注册功能的业务类方法,用单元测试再写工作代码的方式来工作的话
      开发人员就会先考虑各种场景相关,例如正常注册、用户名重复、没有满足必要的填写内容......等等,之后就会编写相关的测试用例

      public Class UserSerivceTest(){
          public userRegister_Ok(){
              ......
          }

          public userRegister_nameDuplicated(){
              ......
          }

          public userRegister_emailEmpty(){
              ......
          }
      }

      编写单元测试代码的过程就是促使开发人员思考工作代码实现内容和逻辑的过程,之后实现工作代码的时候,开发人员思路会更清晰,实现代码的质量也会有相应的提升。

    2. 提升反馈速度,减少重复工作,提高开发效率。开发人员实现某个功能或者修补了某个bug,如果有相应的单元测试支持的话,开发人员可以马上通过运行单元测试来验证之前完成的代码是否正确,而不需要反复通过发布war包、启动jboss、通过浏览器输入数据等繁琐的步骤来验证所完成的功能。用单元测试代码来验证代码和通过发布应用以人工的方式来验证代码这两者的效率差很多,看到很多开发人员每天要反复执行N次发布脚本(antx之类的工具)真是痛苦。
    3.保证你最后的代码修改不会破坏之前代码的功能。项目越做越大,代码越来越多,特别涉及到一些公用接口之类的代码或是底层的基础库,谁也不敢保证这次修改的代码不会破坏之前的功能,所以与此相关的需求会被搁置或推迟,由于不敢改进代码,代码也变得越来越难以维护,质量也越来越差。而单元测试就是解决这种问题的很好方法(不敢说最好的)。由于代码的历史功能都有相应的单元测试保证,修改了某些代码以后,通过运行相关的单元测试就可以验证出新调整的功能是否有影响到之前的功能。当然要实现到这种程度需要很大的付出,不但要能够达到比较高的测试覆盖率,而且单元测试代码的编写质量也要有保证。

    4. 让代码维护更容易。由于给代码写很多单元测试,相当于给代码加上了规格说明书,开发人员通过读单元测试代码也能够帮助开发人员理解现有代码。很有opensource的项目都有相当量的单元测试代码,通过读这些测试代码会有助于理解生产源代码。

    5. 有助于改进代码质量和设计。除了那些大拿们编写的代码,我相信很多易于维护、设计良好的代码都是通过不断的重构才得到的。虽然说单元测试本身不能直接改进生产代码的质量,但它为生产代码提供了"安全网",让开发人员可以勇敢地改进代码,从而让代码的clean和beautiful不再是梦想。

单元测试的缺点

    1.单元测试的学习成本比较高。编写单元测试涉及的技术很多,如果只是单纯的使用Junit或是 TestNG这样的基础单元测试框架往往很难应对各种复杂的单元测试情况,所以势必要借助很多第三方的框架和技术(easymock,jmock,dbunit等等),这些框架和技术的学习还是会增加学习的成本和难度。
    2.编写单元测试会增加程序员工作量。单元测试跟生产代码是一样的,并不会应为是用来测试的就有所不同,开发人员同样要面对测试代码的编写、维护等工作,也同样要面对避免重复代码等一系列问题,能否写出好的测试代码还是取决于开发人员的设计和编码能力。
    3. 推广和运用单元测试需要比较大的投入。只有在每个开发人员都编写了足够的、质量好的单元测试代码,大家才能真正享受到单元测试带给我们的好处。在达到这种层度以前,还需要不少实现和资源的投入。

总结

   虽然单元测试也有一些缺点和负面的效应,但跟单元测试的优点比较起来,为了克服和解决这些缺点所在的付出是值得的。
分享到:
评论
2 楼 huashuizhuhui 2011-12-06  
我一般用spring自带的TestCase;用测试去驱动开发的团队、公司还是比较少的,不过最好代码都写上测试用例,方便别人也方便自己。
1 楼 emilyzhanghong 2011-12-06  
你好,看了你的帖子,想请教下,先写测试用例,再写工作代码,好处道理是明白,但总是不知道从何下手来写出一个能跑通的测试用例,我用的easymock,简单的还是知道怎么写,但稍微复杂点的就不知道了,能不能给些建议,谢谢

相关推荐

    junit单元测试实验

    开发者需要编写测试方法来测试Exception的情况。例如,对于divide方法,可以编写一个测试方法来测试除数为零的情况。 知识点8:断言的使用 断言是单元测试中非常重要的一部分。开发者需要使用断言来验证测试结果。...

    测试入门--7单元测试

    1. **提高代码质量**:强制性地编写测试用例促使开发者思考各种可能的输入和行为,有助于发现潜在问题。 2. **易于维护**:随着代码的修改,单元测试能帮助发现和修复破坏原有功能的变更。 3. **文档作用**:测试...

    基于RTRT单元测试

    2. **编写测试用例**:根据被测单元的功能编写相应的测试用例,利用RTRT提供的API来构造输入数据和预期输出。 3. **执行测试**:通过RTRT执行测试用例,获取实际的测试结果。 4. **分析结果**:对比实际测试结果与...

    在 MATLAB 中编写基于类的单元测试

    MATLAB 单元测试有很多优点,例如可以提高测试的效率、提高代码的可靠性、提高开发者的信心等。MATLAB 单元测试可以帮助开发者快速地编写和执行单元测试,并且可以提高测试的效率。 MATLAB 中的基于类的单元测试是...

    单元测试、集成测试、系统测试基础知识.pdf

    3. 测试实现:编写测试用例、规程、脚本和数据文件。 4. 测试执行:执行测试用例,修复问题并进行回归测试,最后提交测试报告。 【集成测试】 集成测试的目的是确保组件组合后的整体行为符合预期,这属于灰盒测试。...

    实用软件单元测试指导

    1. **编写测试用例**:定义测试的目的、输入和期望输出。 2. **执行测试**:运行测试用例并收集结果。 3. **评估结果**:对比实际结果与期望结果。 4. **调试和修正**:对于未通过的测试,进行调试并修正代码。 5. *...

    xCode 单元测试指南

    - **编写测试用例**:在测试用例类中实现具体的方法来执行测试。 - **管理测试数据**:使用`@testable import`引入测试所需的类和方法,并管理测试数据。 #### 七、运行测试 运行单元测试非常简单,只需选择菜单中...

    【软件测试】: 单元测试:桌面检查、走查方式、代码审查.doc

    3. 编写测试代码:根据测试用例,编写测试代码 4. 执行测试:执行测试代码,检查软件的正确性和可靠性 5. 分析结果:分析测试结果,发现软件中的错误和缺陷 6. 修复错误:修复软件中的错误和缺陷 7. 重复测试:重复...

    敏捷开发必要技巧12:单元测试

    在敏捷环境中,单元测试有以下几个关键优点: 1. **质量保障**:单元测试提供了对代码功能的快速验证,确保每次代码修改后,关键功能仍能正常运行。 2. **可维护性**:良好的单元测试可以作为代码的文档,明确函数...

    ePUBw.COM - 有效的单元测试1

    第三部分关注测试的可信赖性,包括如何避免注释掉测试、编写明确的测试注释,以及处理平台差异和有条件测试等问题,确保测试的可靠性。 在"消遣"部分,作者探讨了可测设计的重要性,指出可测性是良好设计的一个标志...

    软件测试单元测试

    - **编写测试驱动程序和桩模块**:用于模拟单元接口的数据交互。 - **执行单元测试**:按照计划执行测试,并记录测试结果。 - **评估单元测试**:分析测试结果,识别潜在的问题。 **3. 需求的获取** 单元测试的需求...

    单元测试报告模板-单元测试报告模板

    这不仅有助于后续的软件开发工作,还能为软件单元的评审验收提供重要的参考依据。此外,单元测试报告还会被纳入软件产品的配置管理库,方便团队成员之间的协作与交流。 #### 二、软件单元描述 此部分主要涉及被测试...

    软件测试基本路径法设计测试用例Junit单元测试归纳.pdf

    基本路径法设计测试用例有很多优点,包括: * 可以设计更加全面的测试用例 * 可以提高测试的效率和有效性 * 可以帮助测试人员更好地了解软件系统的控制流程 * 可以帮助开发人员编写更加可靠的软件系统 六、结论 ...

    测试员速成-单元测试

    3. **设计与实现**:编写测试用例和测试脚本。 4. **执行与监控**:执行测试并监控结果。 5. **报告与改进**:汇总测试结果,提出改进建议。 ##### 3.6 测试实施 - **环境搭建**:配置测试环境。 - **测试用例执行...

    Wings c/c++测试驱动自动生成工具v2.0

    (2) 函数驱动自动生成模块 依据PSD文件的格式信息,自动生成被测源程序的所有驱动函数,单元测试过程不再依赖开发人员手动编写测试函数,只需将生成的驱动函数和被测源文件一起编译,即可执行测试并查看测试结果...

Global site tag (gtag.js) - Google Analytics