在测试驱动开发(TDD)时并无需测试私有方法,原因如下。

在测试驱动开发(TDD)教学过程中,开发者经常提及的一个问题是“你是如何测试私有方法呢?”简短的回答是“根本不需要”,Michael Feathers在其经典著作《修改代码的艺术》中曾经给出了更为详尽的解答。

当然,你也可以测试私有方法,我发现不少开发者为此引入了种种诀窍——利用公共委托或者公共代理把私有方法包装起来,甚至是利用反射机制访问该私有方法——但引入这些诀窍的主要原因应该是处理那些反映异常现象的代码坏味道。

Feathers指出,“如果某个私有方法可以通过公共接口(调用私有方法的公共方法)来测试就可以认为它已经被测试,代码覆盖率也会显示该私有方法已被测试”,这正是我本人以及其他志同道合者强调“在测试驱动开发时无需测试私有方法”的原因所在。

如果你仍然为了测试是否覆盖私有方法而感到焦虑不安,极可能就是另有原因了,可能该私有方法承担了过多的职责,它应该被拆分为自身可测试的类。这样一来,这个方法就可以被声明为公开的(public)进而被直接测试,此时调用者大可以持有该类的一个私有引用,其接口也不会受到影响。

私有方法主要用于隐藏具体实现,在测试驱动开发时我们并不想测试具体的实现细节,但在必要时它可以是QA工作的一部分。

阅读原文 »

2 收藏


直接登录

推荐关注