おやつ前のTDD

3
あひさめ @a_hisame

TDDなう。 内部メソッドのテストをしたいんだけれど、そのメソッドのパラメタがコンストラクタの物をそのまま利用するものであった場合、テストコードに迷い中。

2010-04-21 13:31:16
あひさめ @a_hisame

Hoge hoge = new Hoge( new String[]{"abc", "bbb"} ); hoge.method( /* コンストラクタの引数*/ ); で methodはHogeのコンストラクタ内で呼ばれる場合、どんなコードを記述すべきだろうか

2010-04-21 13:32:34
あひさめ @a_hisame

もちろん、hoge.methodは独立して作業を行えるので 適当な初期化をするか、フィールドに持たせて流用するか……

2010-04-21 13:33:53
ぐるぐる系SQL @bleis

@a_hisame そのメソッドをテストしたいのかコンストラクタをテストしたいのか。そのメソッドがprivateなら無理してテストする必要ないんじゃ? [TDDBC名古屋7/10,11予定]

2010-04-21 13:34:40
あひさめ @a_hisame

@bleis 正直privateでいいんだけれどねー。 テストした方が安全な気がして・・・・・・この辺りのテストする/しないの勘所が難しい

2010-04-21 13:35:58
あひさめ @a_hisame

@bleis まあ、あとはpackage privateレベルにして、private無しでも良いかなと思いつつ処理してるのもある。 現状privateなし

2010-04-21 13:36:36
ぐるぐる系SQL @bleis

@a_hisame なら設計を見直す機会ととらえるか [TDDBC名古屋7/10,11予定]

2010-04-21 13:37:00
あひさめ @a_hisame

@bleis どうなのかなー。 設計としてはコンストラクタで投げて各種初期化 => 使う だけなんだけれど

2010-04-21 13:38:15
あひさめ @a_hisame

@bleis この初期化に色々と関数を切り出しているから、そこを外から個別テストして正当性を確かめたいってだけなんだけれど。

2010-04-21 13:38:44
あひさめ @a_hisame

いっそ、テストを作ってテスト>消す(private化)でも良いのかな。。。

2010-04-21 13:39:48
ぐるぐる系SQL @bleis

@a_hisame 今のクラスの、そのメソッドで初期化するフィールドをまとめてクラスに抽出すればおk [TDDBC名古屋7/10,11予定]

2010-04-21 13:40:21
ぐるぐる系SQL @bleis

@a_hisame コンストラクタ内からメソッド呼んじゃう時点で、イミュータブル性の保障できないし(finalフィールドに出来ない)、まとめてクラスにしちゃってもいいんじゃないかな。いや、詳細知らんからわからんけど [TDDBC名古屋7/10,11予定]

2010-04-21 13:41:50
あひさめ @a_hisame

@bleis いや、フィールドはメソッドの結果を受けて初期化するだけだよ?

2010-04-21 13:42:11
あひさめ @a_hisame

@bleis finalフィールドにするために結果をメソッドに丸投げ=>コンストラクタでfinalフィールドに設定 をしてる

2010-04-21 13:42:50
ぐるぐる系SQL @bleis

@a_hisame ん?各種初期化ってのは? [TDDBC名古屋7/10,11予定]

2010-04-21 13:43:25
あひさめ @a_hisame

@bleis そのクラスの全てのフィールドを(少なくとも見た目上は)イミュータブルに初期化する

2010-04-21 13:44:23
あひさめ @a_hisame

見た目上はってのは、ユーザから見てって意味ね。 変更操作は一切ユーザには与えない。

2010-04-21 13:44:52
ぐるぐる系SQL @bleis

@a_hisame hogeみたいなメソッドがたくさんあるってこと? [TDDBC名古屋7/10,11予定]

2010-04-21 13:45:21
あひさめ @a_hisame

@bleis 高々2,3個だとは思うけれど。 そんなに数多くはない。

2010-04-21 13:45:54
ぐるぐる系SQL @bleis

@a_hisame それでも、コンストラクタ内で仕事しすぎかな、って感じが [TDDBC名古屋7/10,11予定]

2010-04-21 13:46:45
あひさめ @a_hisame

@bleis んー。まあ今回は自分の考えで通してみる。 また機会があったら(疑似)コード見て議論しよう。多分そっちの方が良い。

2010-04-21 13:48:20
rf @rf0444

@a_hisame なんか複雑になってるなぁ。俺のすげぇ単純になったけど・・・

2010-04-21 13:49:30
あひさめ @a_hisame

@rf0444 ああ、テストの書き方について思うところがあっただけ。 書いてる記述自体はかなり単純。

2010-04-21 13:50:23
なかわんくま/nakawankuma/ @nakawankuma

. @a_hisame @bleis コンストラクタでは今は処理しないのがいいよ。

2010-04-21 13:50:47
rf @rf0444

@a_hisame 1クラスで、公開コンストラクタ1個と公開メソッド1個と公開データ構造1個。packageアクセスのヘルパが3つ。

2010-04-21 13:50:59