編集可能

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

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

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

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

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

2012-08-25 16:38:24
いろふ @irof

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

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

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

2012-08-25 16:43:51
いろふ @irof

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

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

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

2012-08-25 16:46:49
いろふ @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

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

2012-08-25 17:02:36
いろふ @irof

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

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

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

2012-08-25 17:07:02
いろふ @irof

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

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

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

2012-08-25 17:10:53
いろふ @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

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

2012-08-25 17:17:15
いろふ @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

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

2012-08-25 17:20:17
いろふ @irof

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

2012-08-25 17:21:17
残りを読む(14)

コメント

Tsuyoshi CHO @tsuyoshi_cho 2012年8月25日
ってか、昨今のテストツールはリフレクション的というかアノテーションとかで、privateでもテストできませんっけ?
0
SHUJI🐊043 @shuji_w6e 2012年8月26日
個人的には、privateメソッドのテストはアンチパターンだと思うな。 ほとんどの場合は必要ないか設計に問題があるかだと思うわ
0
Mizoguchi Michiaki @mizoguche 2012年8月26日
リフレクションでprivateメソッドをテストするとリファクタリングしたときにメソッド名を変えたりしてめんどかった経験があるので、テストでは極力リフレクションは使いたくない派。こういう場合はやっぱり自分もテストしたいprivateメソッドを別クラスにpublicメソッドとして切り出しますねー。
0