blackchoc 2010-11-04 15:21
浏览 328
已采纳

写TDD的测试是否不应该对private方法进行测试

再非TDD的测试中,会遇到写测试的时候想对一段逻辑(通常是函数)进行测试却发现这个函数是private在测试,不能访问的问题.遇到这种情况我一般有两种方式处理
1. 将该函数声明为public的, 但是这样破坏了这个类的封装性
2. 将函数声明为protected,然后将测试类放在同样的包下(不同的源码包), 但是也不是很好

所以在非TDD的测试中,更多的是进行最粗粒度的service层(类似于API)的测试.

现在偶在尝试TDD, 让domain有更多的职责使其丰富起来,但是这个问题依然困扰我.
那么TDD是不是应该避免这个问题呢?
我对于TDD是这样理解的,更多的是通过测试来进行设计,在编写测试的过程中将对象之间的交互和关系体现出来,因此主要针对Service层(系统对外部提供API)以下的测试
如果我遇到在非TDD测试中访问private函数的问题的时候,我是不是就应该考虑
1. 自己过于关注细节,只要看结果即可
2. 是不是应该将这个方法放到其它的类中,由这个类提供public方法出来,并且根据这个类编写另外的测试(tell don't ask)

不知道我对此的理解是否正确
问题补充
三楼发的几个链接相当不错,很全面详细地说了几种测试private的方法
别的没有记住.老外的那个比喻太搞了
just like mother used to say not to expose your private!!!
相当雷人哈

  • 写回答

12条回答 默认 最新

查看更多回答(11条)

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题