- テストしにくいコードをテストする方法教えて下さい
926 :デフォルトの名無しさん[sage]:2017/01/03(火) 09:56:37.13 ID:078nuCwR - プログラム設計の善し悪しとテスト技法がごっちゃになってる。
このスレでテストする側とすれば設計の善し悪しなんて知ったこっちゃないのよ。スレタイ読め。 例で考えよう。 private function numberOfFeet(動物) returns 脚の数 { if (動物 == 人) { return 2 } if (動物 == 犬) { return 4 } if (動物 == 猫) { return 4 } raise exception 知らない動物 } っていう関数が既にあるとする。 人なら2, 犬猫なら4, それ以外では実行中断というテストになって、それ以外の結果が出るはずがないのを期待している関数で、 エンドユーザに影響がない限りにおいてはこれの中身がどう実装されていようと知ったこっちゃない。 つまり可視なテストコードからの実行結果も変化すべきではない。変化するとすればそれは private 関数内部のバグと見ていい。 このプライベート関数とセットになる可視テストでそこが保証できたら、この関数をどこで使ったとしても「改めてテストをする必要がないブラックボックス」にできるわけだ。 ただ、この後、生物学あたりで人の腕も前脚だ、つまり人の脚の数は4本だというように定義が変更になった場合を考えてみて。 人の脚を訊いたら4と返すようにしないといけないのはエンドユーザにも見えるような仕様変更だから 設計をそのままにするならテストも変更せざるを得ないというのは納得いただけるかと思う。 これはプログラム設計の時には思いもよらない変更だと思うからプログラマの非ではないが、対応する必要はある。 このスレではここまでの話で済ませればいい。 では脚の数を訊く関数を廃止して別の方法を採るのか、やはりそのまま行くのか、その設計がきれいなのか汚ないのかは別の話。 このスレでの興味はあくまで既存コードのテストなので、まずはその時点で考え得るバグが検出できたらそれでいいわけ。 設計の善し悪しの話がしたいのであれば別スレ建ててやってくれ。
|