privateメソッドについての思いの変遷
UnitTestでのprivateメソッドとの向き合い方 - ジムには乗りたい を読んで、自分のprivateメソッドに対する思いを書き殴りたくなったので書いてみました。
変遷
新人の頃の☃「private?メソッド?というのがあるのか。ふむ。ふむ……?」
新人ではなくなったが若手の頃の☃「メソッドが大きくなってきたな。privateメソッドで分割だ!」
若手とは言えなくなった頃の☃「privateメソッドのテストコードってどう書いたら良いんだ?リフレクションか?」
2、3年前の☃「privateメソッドは共通処理を切り出すためのもの。呼び出し元のpublicメソッドのテストコードで担保される」
最近の☃「privateメソッド スベテ コロス!!!」
解説
新人の頃は割愛。
次の若手の頃の話は、これは大きいメソッドを単にぶつ切りにして満足しちゃってた感じ。 臭いものに蓋してるだけで何の解決にもなっていませんでしたね、今から思うと。
それからprivateメソッドのテストコードについて悩みました。 どうすれば良いんだ?と。 悩んだ挙句protectedにしちゃたりしてましたが、これも誤魔化しですね。
で、しばらくして、呼び出し元のテストで担保できるじゃろ、と思うようになりました。 この頃にprivateメソッドは複数のpublicメソッドに共通する処理を切り出すものだ、と考えるようになったのでした。 逆に言うと、publicメソッドの一部を共通化する以外の目的でのprivateメソッド導入はダメだと考えるようになりました。
そんでもって最近は、なるべくprivateメソッドは導入したくないと思っています。
個人的にはprivateメソッドを導入する時点で、これ他のクラスのpublicメソッドなのがあるべき姿かも?と考えるようにしてる。
— うらがみ⛄ (@backpaper0) 2016年9月4日
年々、小クラス主義になってるのかなー。 みたいな。
まとめ
冒頭で記載したエントリでは、
結局のところ、privateメソッドの詳細に踏み込んだテストが必要になった時は、設計に何か問題がある可能性が高いということなのだと思う。
と書かれていましたが、私はprivateメソッドを導入しようと思ったタイミングで設計に問題があるのでは?と疑ってみるようにしています。