51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 512|回复: 0
打印 上一主题 下一主题

[原创] 单元测试到底作用大不大?

[复制链接]
  • TA的每日心情
    无聊
    4 天前
  • 签到天数: 941 天

    连续签到: 3 天

    [LV.10]测试总司令

    跳转到指定楼层
    1#
    发表于 2023-4-7 11:22:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    单元测试有必要吗?
      整个开发环节中,越晚发现问题解决问题的成本就越高。单元测试的意义就在于提前发现问题,减少开发和测试的成本。
      从测试覆盖率来说,测试金字塔越往上执行的测试,可覆盖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
      · 支持多线程测试

    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-5-4 15:20 , Processed in 0.061413 second(s), 23 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表