トップページ > プログラム > 2016年12月28日 > zQENRRN7

書き込み順位&時間帯一覧

11 位/194 ID中時間01234567891011121314151617181920212223Total
書き込み数1000000000000000000000034



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
テストしにくいコードをテストする方法教えて下さい

書き込みレス一覧

テストしにくいコードをテストする方法教えて下さい
848 :デフォルトの名無しさん[]:2016/12/28(水) 00:11:54.87 ID:zQENRRN7
privateメソッドに対してテストをしたくなっったら
それはクラスが肥大化してる証拠だよ。

まず前提としてprivateメソッドなんてものは
ほとんど必要ありません。

長い処理があったとして、その中で汎用的な処理を
抜き出していったら、コードは短くなります。
短いのだからprivateな関数にするまでもありません。

それでもprivateメソッドが残ったとしたら
それはヘルパーメソッドとして別クラスに分離する。
別クラスの関数を呼ぶのだから、必然的にそのメソッドはpublicになる
そうすりゃそのメソッドだけでテストかけるだろう?

privateメソッドをテストしたいっていうのは、作り方が悪いんだよ。
テストしにくいコードをテストする方法教えて下さい
860 :デフォルトの名無しさん[sage]:2016/12/28(水) 23:06:39.02 ID:zQENRRN7
>>849
> privateにすべきかどうかは、外部から隠蔽すべきかどうかのみによる。

ヘルパークラスを作れば外部から隠蔽しない理由になるだろ

privateのままにしておくからテストできないんだよ。
そういうものは隠蔽すべき理由を無くしてpublicにしてしまえと言ってる。
テストしにくいコードをテストする方法教えて下さい
861 :デフォルトの名無しさん[sage]:2016/12/28(水) 23:10:39.71 ID:zQENRRN7
言っておくけどprivateのものを処理を全く変えずにpublicにしろって話じゃない。

テストをしたくなるほどprivateメソッドが複雑になるのであれば、
そのprivateメソッドをヘルパー関数の形で汎用化しろって話。

そうすれば、対象のクラスそのものではなくてヘルパークラスのみで
テストできるようになる。そしてクラスはシンプルになる。
テストしにくいコードをテストする方法教えて下さい
862 :デフォルトの名無しさん[sage]:2016/12/28(水) 23:18:43.37 ID:zQENRRN7
>>857
> そのような場合は、リファクタリング後にテストを変更するのでは?

これも関連する話。まずリファクタリング後にテストを変更するのは当然

まず対象のクラスに対してテストを書く。そしてリファクタリングをする。
この時、汎用的な処理をヘルパークラスや親クラスとして抽出する。

ここまででテストを変更することはないが、
次に対象のクラスにあったテストのうち、ヘルパークラスや親クラスに分離したものは、
対象のクラスのテストではなくて、ヘルパークラスや親クラスのテストとして移動する

ヘルパークラスや親クラスでテストしている内容を、
それを使用している対象クラスでもやる必要はない。

具体的に言うと、あるモデル、例えばUserモデルクラスにsaveメソッドを作ったのであれば
そのsaveメソッドのテストを書くのは当然だが、そのsaveメソッドが親クラス
(例えばRailsで言えばActiveRecord::Baseクラス)にあるものならば、
Userモデルクラスでsaveメソッドのテストをする必要はない。


こうやってヘルパークラスや親クラスに処理を移動して、それに対するテストを書くことで
それを使用している部分ではテストが不要という状態を作り上げることが重要


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。