单元测试是不是鸡肋?

发表于:2023-4-07 09:59

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:佚名    来源:知乎

  单元测试有必要吗?
  整个开发环节中,越晚发现问题解决问题的成本就越高。单元测试的意义就在于提前发现问题,减少开发和测试的成本。
  从测试覆盖率来说,测试金字塔越往上执行的测试,可覆盖case会逐渐变下,比如UI测试只能保证页面正常,接口异常不会测试覆盖完整。接口覆盖完整了,又不能保证代码中所有逻辑都覆盖,某些函数某些类的功能无法覆盖,这样情况下发现的问题都是不好复现的bug。
  有时候上层代码的单元测试难写,有没有一种可能是代码写的太烂了?
  在《快速软件开发》的书中引用了大量的研究数据指出,最后才修改一个bug的代价是在bug产生时候修改它代价的10倍。
  应该在什么情况下写单元测试?
  1.新的功能开发:在开发新功能时,编写单元测试可以帮助确保新功能的正确性。
  2.修改现有代码:在修改现有代码时,编写单元测试可以确保修改对其它部分代码没有影响。
  3.重构代码:在重构代码时,编写单元测试可以确保重构后的代码仍然能够按预期工作。
  4.维护代码:为长期维护的代码编写单元测试,可以帮助保证代码的可靠性和稳定性。
  5.多人协作开发:在多人协作开发中,单元测试能够提供一种确保代码正确性的有效方法,并且可以降低团队开发过程中的沟通成本。
  单元测试的主要目的是提高代码的质量,确保代码在维护和更改过程中仍能按预期工作。在所有需要维护和开发的项目中都可以使用单元测试,项目规模不同时编写的单元测试数量也不同。
  单元测试的原则
  ·单一责任原则:每个测试用例只测试一个功能,避免混杂多个功能的测试
  · 快速执行原则:单元测试应该非常快,方便经常运行,避免因测试时间过长而导致开发人员不愿意运行测试
  · 独立运行原则:单元测试应该独立运行,不应该相互依赖。每个测试都应该是可重复且独立的。
  · 可重复性原则:单元测试应该具有可重复性,每次运行都应该产生相同的结果。
  · 代码覆盖原则:单元测试应该覆盖每一个函数和代码路径,确保每一个函数都被测试了。
  · 自动化原则:单元测试应该自动化,并且应该能够在每次代码提交后自动运行,确保不会因为遗漏而导致重大缺陷。
  主流框架JUnitTestNG
  JUnit是Java的单元测试框架,用于编写和运行可重复的测试,特性:
  · 用于测试期望结果的断言(Assertion)
  · 用于共享共同测试数据的测试工具
  · 用于方便的组织和运行测试的测试套件
  · 图形和文本的测试运行器
  TestNG是一个测试框架,引入了一些新功能,TestNG 消除了大部分的旧框架的限制,使开发人员能够编写更加灵活和强大的测试。 因为它在很大程度上借鉴了Java注解( JDK5.0 引入的)来定义测试,它也可以显示如何使用这个新功能在真实的Java语言生产环境中。
  特点如下:
  · 注解
  · TestNG 使用 Java 和面向对象的功能
  · 支持综合类测试(例如,默认情况下,不用创建一个新的测试每个测试方法的类的实例)
  · 独立的编译时测试代码和运行时配置/数据信息
  · 灵活的运行时配置
  · 主要介绍“测试组”。当编译测试,只要要求 TestNG 运行所有的“前端”的测试,或“快”,“慢”,“数据库”等
  · 支持依赖测试方法,并行测试,负载测试,局部故障
  · 灵活的插件 API
  · 支持多线程测试
  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号