privateメソッドのテストについて

tddbc岡山から派生した議論
27
irof @irof

テストを書きたいと思うほどの責務をprivateメソッドに持たせてるのはどうなんだ。とは思う。 #tddbc

2012-08-25 16:36:15
瀬良 @shela_

@irof publicからprivateを含めて検証するのと、private単体だけで検証するのであれば、先にprivate単体で検証しておいた方が安心感があると思う

2012-08-25 16:38:24
irof @irof

@kyon_mm @shela_ privateは内部の共通化とか処理の固まりに名前をつけるとかのメソッド抽出で出てきて、最初からprivateにするのはあんまないと思ってる。

2012-08-25 16:41:34
きょん@アジャイルコーチ、システムアーキテクト @kyon_mm

@irof ある共通的な処理の固まりがprivateならテストしたくなるほどの責務を持たせる場合があるんじゃないの?

2012-08-25 16:43:51
irof @irof

@kyon_mm それ書いた時点でpublic経由のテストは書き終えてます。

2012-08-25 16:45:32
きょん@アジャイルコーチ、システムアーキテクト @kyon_mm

@irof っていうことはprivateから始まるプロダクトコードはTDDでは書いてはいけないということでよい?

2012-08-25 16:46:49
irof @irof

@kyon_mm privateから始まるって状況がわからない・・・

2012-08-25 16:47:17
きょん@アジャイルコーチ、システムアーキテクト @kyon_mm

@irof 設計を先に済ませていると、はじめから「あー、この処理絶対に共通的に必要じゃん。privateで定義すればいいよね。」ってなる場合。

2012-08-25 16:49:22
瀬良 @shela_

@irof @kyon_mm publicの処理で絶対にprivateには入らない値での検証がどうなるか。privateを将来再利用する機会が来た場合に初めてその値を検証することになるので、その時までバグが発覚しないことになりそう。

2012-08-25 16:57:52
irof @irof

@shela_ その「将来再利用したとき」でいいと思います。

2012-08-25 17:02:36
irof @irof

@kyon_mm んー……責務持ち過ぎ感はありますが。それだけ核になることならそこから手をつけると思うので、多分先に書くから行けるんじゃないかなと。

2012-08-25 17:04:20
きょん@アジャイルコーチ、システムアーキテクト @kyon_mm

@irof いや、結果として同じコードになるなら責務持ち過ぎっておかしくないですか? 先に書くからっていうのは、先にprivateにしていても、それをつかうpublicを書くであろうそこからテスト通せる的な意味です?

2012-08-25 17:07:02
irof @irof

@kyon_mm 「メソッド単体でテストしたい」気持ちが強いなら、やっぱ中に隠すにはやり過ぎだと思う。

2012-08-25 17:09:25
瀬良 @shela_

@irof @kyon_mm それは必要なアクセス範囲を超えて公開することになるから設計としてよくないかと

2012-08-25 17:10:53
irof @irof

@shela_ @kyon_mm かもしれないですね。(対象が明確でないですし十把一絡げに言いたくないです。)

2012-08-25 17:14:05
きょん@アジャイルコーチ、システムアーキテクト @kyon_mm

@irof 「publicとprivateの境目は<例として>共通処理である」「共通処理にはテストが必要だと思うが、それが予見できている場合に最初からprivateにする方針ではどうするのか?」っていう流れなんだけどそこで「メソッド単体でテストしたい」は別じゃない?

2012-08-25 17:15:10
きょん@アジャイルコーチ、システムアーキテクト @kyon_mm

@irof 「メソッド単体でテストしたい」かどうかではなくって、論点としては「初めからprivateにするということはTDDではゆるさない(アンチパターンくらいでいいかしれない)」のかどうかです。別にprivateでテストしたいとかそういう意味ではない。

2012-08-25 17:16:44
irof @irof

@kyon_mm その流れでいくと、たぶん共通処理をpublicに書いてからメソッド抽出しますが、「public経由でテストできてんじゃん」です。最初からprivateで書いて、「privateにテスト書く書かない?」の話をするのはなんかコレジャナイ感。

2012-08-25 17:17:15
irof @irof

@kyon_mm 「アンチパターンである!」と言い切りたくはないですが、私は積極的にはしないです。

2012-08-25 17:17:56
しんすく(け) さん。 @snsk

@irof @kyon_mm こういうの死ぬほど参考になりますm(_ _)m

2012-08-25 17:18:20
きょん@アジャイルコーチ、システムアーキテクト @kyon_mm

@irof なるほどね。だいたいわかった。そしておおいに同意だ。

2012-08-25 17:19:08
irof @irof

@kyon_mm 途中中途半端に変なこと言ったっぽくてなんかごめんなさいな気分(・ω・`)

2012-08-25 17:20:17
irof @irof

とりあえずモヤモヤを言葉にできたのでありがたい。心臓には悪いw

2012-08-25 17:21:17