[過去ログ] カプセル化■プライベートメソッドをテストする方法 (476レス)
上下前次1-新
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
84: 2020/07/07(火)11:40 ID:YBf2Aagc(1/23) AAS
>>81
当たり前だろ?
テストではなくデバッグだしねっていうのが意味わからんって言ってる
テストはテストだろ
91(2): 2020/07/07(火)13:10 ID:YBf2Aagc(2/23) AAS
>>85
デバッグはテストじゃなくてデバッグだしねと言われても当たり前としか言えないし、
デバッグの前にやるテストはテストだしねで終わりだろ?
95(3): 2020/07/07(火)13:34 ID:YBf2Aagc(3/23) AAS
>>92
何がいいたいの(笑)
俺を馬鹿にしたいのかな?でも文章がそうなってないな。
99(1): 2020/07/07(火)15:04 ID:YBf2Aagc(4/23) AAS
> それに対する回答が「非公開のメンバはブラックボックスとして扱いテストしてはならない」という和田メソッドが示された。
正確には
・パブリックメソッド経由でテストする
・別クラスのパブリックメソッドとする
・テスト対象の可視性を(やや)上げる
・プライベートのまま、リフレクションでアクセスしてテストを書く
まとめ
繰り返すと、プライベートなメソッドや関数をテストする必要は無いと考えています。
プライベートなメソッドは、実装の詳細であるからです。
102: 2020/07/07(火)15:07 ID:YBf2Aagc(5/23) AAS
>>98
> それに対して「入力に使われる一つのメンバしかもたないパーサ」という実例を挙げ、「文字列を入力され構文木を返すような状態機械のテストが非常に困難」という話が出た。
> この場合、内部を観測できないのであれば、すべての入力の組み合わせ(受理できない入力もテストするなら、それは無限である)に対して、すべての取りうる構文木のセットを検査しなければならない。
それはパブリックメソッドでも同じこと
内部を観測して、すべての入力の組み合わせをテストしないといけないから
103: 2020/07/07(火)15:08 ID:YBf2Aagc(6/23) AAS
>>101
> ほらテストしてみろ。
テストしてもいいが、先にパブリックメソッドの場合の例を書いてくれ
それと同じことをやればいいだけなんだが
106: 2020/07/07(火)15:12 ID:YBf2Aagc(7/23) AAS
>>105
先にパブリックメソッドの場合に
どうするかを答えてくれないか?
108(2): 2020/07/07(火)15:13 ID:YBf2Aagc(8/23) AAS
自作自演w
105 名前:デフォルトの名無しさん[] 投稿日:2020/07/07(火) 15:11:55.03 ID:zTLocdwC [8/9]
言い張るんだったら、ほんとに和田メソッド被害者の会作っちゃうよ?
会員200万人目指しちゃうよ?
いいの?
107 名前:デフォルトの名無しさん[] 投稿日:2020/07/07(火) 15:12:43.34 ID:zTLocdwC [9/9]
>>105
言いたいことわかってくれるあなたは、PythonとかC#とかC++ですね?
111: 2020/07/07(火)15:15 ID:YBf2Aagc(9/23) AAS
>>110
そんなどうでもいいものばっかりにレスしてないで、
先にパブリックメソッドの場合に
どうするかを答えてくれないか?
113: 2020/07/07(火)15:17 ID:YBf2Aagc(10/23) AAS
どうも都合が悪かったようだな
俺のレスに答えられずひたすら関係ない話を始めた
116: 2020/07/07(火)15:21 ID:YBf2Aagc(11/23) AAS
いいだしっぺが説き伏せるそうです。
実際に行動を起こせるか見てみましょう
118: 2020/07/07(火)15:22 ID:YBf2Aagc(12/23) AAS
いきなり他人だよりです(笑)
自分から知らせに行く勇気もないようですね
120: 2020/07/07(火)15:26 ID:YBf2Aagc(13/23) AAS
ではまずいいだしっぺから
なぜパブリックメソッドにすると
すべての入力の組み合わせをテストしなくてよくなるのか?
C1カバレッジって言葉知ってますかね?
121: 2020/07/07(火)15:27 ID:YBf2Aagc(14/23) AAS
訂正、すべての入力の組み合わせは2カバレッジだった
122: 2020/07/07(火)15:27 ID:YBf2Aagc(15/23) AAS
C2カバレッジだった
124: 2020/07/07(火)15:42 ID:YBf2Aagc(16/23) AAS
>>123
訂正
一般的にはQueueはprivateのメソッドも単純なロジックしか持たないから
public経由のテストで十分な場合が多いかもしれないけど
それがあらゆる状況に当てはまるわけではない
もしpublic経由のテストで不十分な場合、それはメソッドの責務が大きいと考えられる
リファクタリングして複数のクラスに分離するのが正しい対応
そうすれば自然publicメソッドとなりテストが可能になる
147(1): 2020/07/07(火)22:01 ID:YBf2Aagc(17/23) AAS
>>143
> privateメソッドだからテストしないとか言ってるやつはキチガイ
だれそれ?
privateメソッドはpublicメソッド経由でテストすると
言ってる人しかいないけど?
150: 2020/07/07(火)22:27 ID:YBf2Aagc(18/23) AAS
>>149
> そのままじゃpublicは仕様でt=0のときしかそのprivateメソッドを呼ばないんだから
つまり、publicがt=0のときprivateメソッドを呼ぶんですよね?
publicがt=0のテストをすれば、privateのテストしてるじゃないですかw
151(1): 2020/07/07(火)22:30 ID:YBf2Aagc(19/23) AAS
> ある時改修で別のpublicメソッドからt=3のときにprivateメソッドを呼ぶことになったら
> t=0しかテストやってなかったら
仕様が変わったのならt=3のときのテストを追加しましょう
152: 2020/07/07(火)22:34 ID:YBf2Aagc(20/23) AAS
>>149はホント意味不明だな
最初の仕様・・・t=0のときしかprivateメソッドの処理をしない
t=3のときは?→「privateメソッドの処理をしない」場合の結果が正しい
改修・・・t=3のときにprivateメソッドの処理をすることになった
「privateメソッドの処理をした」場合の結果が以前と異なるという仕様になった
では新しい仕様のテストを書きましょう
これだけなんだがなぁ
前と正しい答えが違うのに、テストを修正しないの?
155: 2020/07/07(火)22:54 ID:YBf2Aagc(21/23) AAS
>>153
だから変わったpublicメソッドをテストしろよ
変わってないならprivateメソッドに何の問題もないだろ
それとも何か?お前すべての取りうる値でテストしろと言ってんのか?
この関数は数値を二倍してくれる関数である。
今まで4を入れてこの関数を呼び出していた。
今度5を入れるようになったから5を入れた場合はどうなるかテストする必要がある
今度は6を、7を、8を・・・って新しい引数で呼び出すために
そのテストが必要なんか?ああん?
156: 2020/07/07(火)22:56 ID:YBf2Aagc(22/23) AAS
>>154
> このメソッドはt=0のときしかテストしていません!
お前は t=全ての整数 でテストしろっていってるってことでいい?
160: 2020/07/07(火)23:36 ID:YBf2Aagc(23/23) AAS
>>157
> は?最小-1、最小、中間、最大、最大+1通すだろフツー
・t=3のどこが、最小-1、最小、中間、最大、最大+1なんだよw
「今回」新しく仕様が変わって、t=3 などというものが登場したんだろ
なら「今回」テストを追加するだけの話だろ
それとも何か? t=3がいままでprivateを呼ばなかったのに
t=3のテストをお前はするんか?どういった理由で?
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.135s*