|
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
|---|---|
| 作者 | 正文 |
|
最后更新时间:2008-01-09 关键字: tdd
刚看了infoq的一篇文章私有方法、测试驱动开发与优秀设计。文章URL:
http://www.infoq.com/cn/news/2008/01/private-methods-tdd-design 那么该拿私有方法怎么办呢?测试它们太折磨人了。我们可否修改一下,把它们暴露给测试代码?或者不去测试私有方法,让设计与可测试性永不相干?或者,私有方法是一种坏味道,它表明一个类做了太多事情? 大家怎么看? 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
最后更新时间:2008-01-09
JavaEye有相关的帖子,可以搜一下。
总结一句话:如果私有方法有复杂的逻辑,就把它抽取到一个对象,给这个对象做测试。 |
|
| 返回顶楼 | |
|
最后更新时间:2008-01-10
抽取到另一个对象里岂不是变成public的了
说到这我想到一个问题:private方法是干什么用的呢? public方法自不必说,是给其他类调用的 protected方法用来给子类调用或重写 private呢? |
|
| 返回顶楼 | |
|
最后更新时间:2008-01-11
daquan198163 写道 抽取到另一个对象里岂不是变成public的了 说到这我想到一个问题:private方法是干什么用的呢? public方法自不必说,是给其他类调用的 protected方法用来给子类调用或重写 private呢? 防止在eclipse里点太多东西出来混乱视听的. |
|
| 返回顶楼 | |
|
最后更新时间:2008-01-11
我用reflection测试
|
|
| 返回顶楼 | |
|
最后更新时间:2008-01-11
bigpanda 写道 我用reflection测试
springside有个工具类就是用来拆开一个class的private方法的. 我非常恶心这种作法 |
|
| 返回顶楼 | |
|
最后更新时间:2008-01-11
daquan198163 写道 抽取到另一个对象里岂不是变成public的了
说到这我想到一个问题:private方法是干什么用的呢? public方法自不必说,是给其他类调用的 protected方法用来给子类调用或重写 private呢? Step 1: 把private方法变成protected,这样在同一个包里的test case就可以测它 Step 2: 把这个protected方法抽到另一个对象里,把测试用例也挪过去 Step 3: 这时这个protected方法只剩下一句话了,把它inline 所以,你这个问题是对的。最理想的情况下,你不应该有private方法。任何超过3句话的非public的方法都应该被看作一个独立的职责,因此应该存在于一个独立的对象中。 |
|
| 返回顶楼 | |
|
最后更新时间:2008-01-11
gigix 写道 daquan198163 写道 抽取到另一个对象里岂不是变成public的了
说到这我想到一个问题:private方法是干什么用的呢? public方法自不必说,是给其他类调用的 protected方法用来给子类调用或重写 private呢? Step 1: 把private方法变成protected,这样在同一个包里的test case就可以测它 Step 2: 把这个protected方法抽到另一个对象里,把测试用例也挪过去 Step 3: 这时这个protected方法只剩下一句话了,把它inline 所以,你这个问题是对的。最理想的情况下,你不应该有private方法。任何超过3句话的非public的方法都应该被看作一个独立的职责,因此应该存在于一个独立的对象中。 3>=方法长度>1 |
|
| 返回顶楼 | |
|
最后更新时间:2008-01-11
gigix 写道 daquan198163 写道 抽取到另一个对象里岂不是变成public的了
说到这我想到一个问题:private方法是干什么用的呢? public方法自不必说,是给其他类调用的 protected方法用来给子类调用或重写 private呢? Step 1: 把private方法变成protected,这样在同一个包里的test case就可以测它 Step 2: 把这个protected方法抽到另一个对象里,把测试用例也挪过去 Step 3: 这时这个protected方法只剩下一句话了,把它inline 所以,你这个问题是对的。最理想的情况下,你不应该有private方法。任何超过3句话的非public的方法都应该被看作一个独立的职责,因此应该存在于一个独立的对象中。 我目前的做法就是把某些私有方法去掉private,用同包下的test case做测试。 |
|
| 返回顶楼 | |
|
最后更新时间:2008-01-11
gigix 写道 daquan198163 写道 抽取到另一个对象里岂不是变成public的了
说到这我想到一个问题:private方法是干什么用的呢? public方法自不必说,是给其他类调用的 protected方法用来给子类调用或重写 private呢? Step 1: 把private方法变成protected,这样在同一个包里的test case就可以测它 Step 2: 把这个protected方法抽到另一个对象里,把测试用例也挪过去 Step 3: 这时这个protected方法只剩下一句话了,把它inline 所以,你这个问题是对的。最理想的情况下,你不应该有private方法。任何超过3句话的非public的方法都应该被看作一个独立的职责,因此应该存在于一个独立的对象中。 我这样理解是否正确:业务类中不应该隐藏复杂的逻辑,要么把逻辑暴露出来(变为protected),要么抽取?这样做的第一感觉就是 类是否会泛滥呢(如果是java的话,3行是不是太短了)? |
|
| 返回顶楼 | |














