论坛首页 软件开发和项目管理版 敏捷开发

TDD & private method 大家怎么看?

浏览 2345 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
最后更新时间:2008-01-09 关键字: tdd
刚看了infoq的一篇文章私有方法、测试驱动开发与优秀设计。文章URL:
http://www.infoq.com/cn/news/2008/01/private-methods-tdd-design

那么该拿私有方法怎么办呢?测试它们太折磨人了。我们可否修改一下,把它们暴露给测试代码?或者不去测试私有方法,让设计与可测试性永不相干?或者,私有方法是一种坏味道,它表明一个类做了太多事情?

大家怎么看?
   
最后更新时间:2008-01-09
JavaEye有相关的帖子,可以搜一下。
总结一句话:如果私有方法有复杂的逻辑,就把它抽取到一个对象,给这个对象做测试。
   
0 请登录后投票
最后更新时间:2008-01-10
抽取到另一个对象里岂不是变成public的了
说到这我想到一个问题:private方法是干什么用的呢?
public方法自不必说,是给其他类调用的
protected方法用来给子类调用或重写
private呢?
   
0 请登录后投票
最后更新时间:2008-01-11
daquan198163 写道
抽取到另一个对象里岂不是变成public的了
说到这我想到一个问题:private方法是干什么用的呢?
public方法自不必说,是给其他类调用的
protected方法用来给子类调用或重写
private呢?

防止在eclipse里点太多东西出来混乱视听的.
   
0 请登录后投票
最后更新时间:2008-01-11
我用reflection测试
   
0 请登录后投票
最后更新时间:2008-01-11
bigpanda 写道
我用reflection测试

springside有个工具类就是用来拆开一个class的private方法的.
我非常恶心这种作法
   
0 请登录后投票
最后更新时间: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的方法都应该被看作一个独立的职责,因此应该存在于一个独立的对象中。
   
7 请登录后投票
最后更新时间: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
   
0 请登录后投票
最后更新时间: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做测试。
   
0 请登录后投票
最后更新时间: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行是不是太短了)?
   
0 请登录后投票
论坛首页 软件开发和项目管理版 敏捷开发

跳转论坛:
JavaEye推荐