10 月 23 - 25 日,QCon 上海站即将召开,现在大会已开始正式报名,可以享受 8 折优惠 了解详情
写点什么

单元测试 vs. 私有方法

  • 2009-02-04
  • 本文字数:841 字

    阅读完需:约 3 分钟

前几天,Naresh Jain 在 Managed Chaos 上发了篇博客,总结了一些测试中的 bad smell 。例如:

一个方法中有太多 test case——被测试的方法做了太多事情。
太多的 setup/teardown——表示被测试类的耦合性太高。
改变一个地方,多处测试受影响——也许是测试的设计问题,也许是实现代码中有过多依赖。
测试上下文中有太多依赖——设计中的耦合性太高。
测试运行速度缓慢——表示你的单元测试也许在使用外部系统,例如网络、数据库、文件系统等等。通常也意味着被测试类有过多的职责。
……

里面还有一条:

为了测试的目的,把成员变量或者方法的访问权限变成 protected 或者 public——可能是因为测试代码跟被测试的代码耦合太高,也可能是本来私有的东西有太多行为,这种情况下应该考虑把它抽出来作为独立的对象。

怎么为私有方法写单元测试?这个难题由来已久了。

有人会选择跳过私有方法,有人会选择去掉 private 限定符;跳过私有方法自然不是良策,但提升访问权限也会破坏封装,在 Naresh Jain 看来也算得上是 bad smell,那怎么解决才好?

Naresh Jain 对此语焉不详,不过还好, Agile Tips 在 08 年 11 月有一篇文章介绍了怎么测试私有方法。文末作者说道:

应该为私有方法添加测试么?我的答案是,在成功的用了 TDD 或者测试驱动重构(Test-Driven Refactoring)以后,你的代码中就不会出现针对私有方法的测试。

如果你用 TDD 编写全新的代码,在没有测试之前是没有功能的。私有方法是到了重构那一步的最后才会出现。把代码转移到私有方法中的这个过程,已经被先前写过的测试覆盖到了。所以,如果你成功了用了 TDD,代码中就不会出现针对私有方法的测试。

如果你在改善遗留代码,你就该使用测试驱动重构。这样的话,可能会临时针对私有方法写一些测试。但是,随着测试覆盖率的增加,那些 public 方法的测试会覆盖到所有的路径,也包括了私有方法的调用。所以,你也不再需要测试私有方法。

在文中,作者也举了一些简单例子说明了用 TDD 的方式重构出私有方法,以及用测试驱动重构处理遗留代码的方式,更多细节请阅读原文

2009-02-04 19:368399
用户头像

发布了 197 篇内容, 共 61.0 次阅读, 收获喜欢 21 次。

关注

评论

发布
暂无评论
发现更多内容

第一周作业

不爱学习的程序猿

SQLMAP _DNS注入配置方法

网络安全学海

网络安全 安全 信息安全 渗透测试 漏洞挖掘

架构实战营第 10 期:模块一作业

kaizen

「架构实战营」

模块一作业

许你丶

#架构实战营

盘点JDK中基于CAS实现的原子类

JAVA旭阳

Java Java并发

华为云大数据解决方案赋能金融行业发展,打造5G智慧银行营业厅

路过的憨憨

华为云CDN多场景加速,“火速”留住用户

秃头也爱科技

与Web3支付赛道主要项目相比,Zebec生态潜力相当大

BlockChain先知

敏捷转型下测试团队该如何安放?

QE_LAB

测试 敏捷转型

低成本、高效率!华为云桌面助力企业数字化转型

IT科技苏辞

2022-12-06:定义一个概念叫“变序最大和“ “变序最大和“是说一个数组中,每个值都可以减小或者不变, 在必须把整体变成严格升序的情况下,得到的最大累加和 比如,[1,100,7]变成[1,6,

福大大架构师每日一题

算法 rust 福大大

极客时间架构实战营第10期模块1作业

刘博

架构

非常好用的Mac系统清理工具CleanMyMac X2023版本

茶色酒

CleanMyMacX CleanMyMac X CleanMyMac X2023

架构实战营 2-1 可扩展随堂练习

西山薄凉

「架构实战营」

ELK-logstash使用总结

忙着长大#

ELK

职场沟通术语

J.Smile

沟通技巧

架构实战营模块7作业

冷夫冲

架构设计 #架构实战营

华为云大数据BI赋能企业数字化发展

秃头也爱科技

nginx学习总结

@下一站

nginx 程序设计 11月日更 web 容器 11月月更

架构实战营10期-作业1

炮仗

初步了解Istio

穿过生命散发芬芳

istio 12月月更

cleanmymac有用吗?2023最新版本值不值得下载

茶色酒

CleanMyMac CleanMyMac X CleanMyMac X2023

流畅高清,华为云桌面Workspace助力设计师高效办公!

秃头也爱科技

拒绝等待,华为云CDN下载加速就是要快人一步

路过的憨憨

前端食堂技术周刊第 62 期:11 月登陆浏览器的新特性、VueConf 2022、第 93 次 TC39 会议、TS 挑战

童欧巴

CSS JavaScript

模块一作业

飞天的卢

【es】elasticsearch/es搜索服务器介绍

No8g攻城狮

elastic ES Elastic Search #java

小游戏开发游戏引擎指南

Onegun

小游戏 小游戏开发 小程序游戏

Linux apt 命令

芯动大师

linux 文件权限控制

极客时间运维进阶训练营第六周作业

忙着长大#

极客时间

小游戏与h5游戏开发技术分析

Onegun

小游戏 小程序游戏 H5小游戏

单元测试 vs. 私有方法_研发效能_李剑_InfoQ精选文章