カプセル化■プライベートメソッドをテストする方法

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
垢版 |
2020/07/05(日) 20:47:46.60ID:M+BkbwUs
■短い回答
プライベートをテストしたい場合は設計に問題があるので、パブリックに変更してテストしましょう

■これに対する(変な人の)驚いた反論

プライベートを一時的にパブリックにして、テストが終わったら
プライベートに戻すなんてやるわけないだろw
↑誰もそんなコトしろなんて言ってない

■テスト専門家による回答

t-wadaのブログ
https://t-wada.hatenablog.jp/entry/should-we-test-private-methods

短くまとめると、プライベートなメソッドのテストを書く必要は 無い と考えています。

ほとんどのプライベートメソッドはパブリックメソッド経由でテストできるからです。
プライベートメソッドは実装の詳細であり、自動テストのターゲットとなる「外部から見た振る舞い」ではありません。
プライベートなメソッドのテストに関しては、4つの考え方があります。

・パブリックメソッド経由でテストする
・別クラスのパブリックメソッドとする
・テスト対象の可視性を(やや)上げる
・プライベートのまま、リフレクションでアクセスしてテストを書く

パブリックメソッド経由でテストする
多くの場合、そのクラスのパブリックメソッド経由でプライベートメソッドのテストも同時に行えます。テストできているか不安があるならテストカバレッジを確認しましょう。

別クラスのパブリックメソッドとする
プライベートなメソッドのテストを書きたいということは、実はテスト対象の責務が多すぎることを示唆している場合があります。
テストがどうしても書きたい場合は、その責務はテスト対象のプライベートな振る舞いではなく、他の誰かのパブリックな振る舞いなのでしょう。
0003デフォルトの名無しさん
垢版 |
2020/07/05(日) 20:51:53.15ID:M+BkbwUs
クソコード例。こんなコード書いてるやつが、privateのテストで
パブリックに変更してテストするのはおかしいとか言ってる(笑)
lenが配列(笑)理由 int型にはnullが入れられないから(笑)

https://mevius.5ch.net/test/read.cgi/tech/1592491656/805
ずれるかもしれないが下のような場合、privateにnullを突っ込んだらヌルポだが
privateをわざわざコード弄ってまで別にテストするようなことは少なくとも
ビジネスソフトでは知ってる限り無い。組み込みとかは知らんし必要ならやれば良いけど。

class ChinTester {
public void testChin(int[] len) {
if (len==null){System.out.println("You are a woman");
return;}
if (len.length<11){ uncS(len);}
else{funcB(len);}
return;}

private void funcS(int[] len){
if (len.length<9){System.out.println("Smallest");
}else{System.out.println("Smaller");}
return;}

private void funcB(int[] len){
if (len.length<14){System.out.println("Medium");}
else if (len.length<16){System.out.println("Bigger");
}else{ System.out.println("Wow!");}
return;}
}
0004デフォルトの名無しさん
垢版 |
2020/07/05(日) 20:53:33.00ID:M+BkbwUs
983 名前:デフォルトの名無しさん[] 投稿日:2020/07/05(日) 14:18:27.81 ID:9F15TCk0 [68/74]
正直あの短さでOOかどうかと(スタティックでインスタンス化もないコードだが)言うのは
不毛だけどID:JiRnWiGCの組み込みおじさんのがOO感はあるよ。

で、staticで出されてもprivateのテストがどうかと言う話には全く寄与しないわけだが、
じゃあ逆に、>>805のチンコテストのfuncSとfuncBはどうやってテストするの?

パブリック経由で全パターンと言うことならこれでこの話はおしまい。
パブリック経由でやりましょう。

違うと言うなら具体的にコードでおながいします。
0006デフォルトの名無しさん
垢版 |
2020/07/05(日) 20:57:49.33ID:M+BkbwUs
>>5の補足、これはまだプライベートですが
普通はMainクラスにコードをごちゃごちゃ書かないので
judgeLengthを含むクラスを作成します。

そしてmainから呼び出します。
必然的にjudgeLengthメソッドはパブリックになります。
0007デフォルトの名無しさん
垢版 |
2020/07/05(日) 21:03:41.24ID:MQ9nuMmc
>>6
judgeLengthをpublicにしてよいかどうか、オブジェクトをわけて良いかどうかは微妙なところで
publicにした場合って他のオブジェクトからも参照可能になってしまうので
そこの依存があとあとjudgeLengthの修正をできなくする可能性があるので
privateにするっていうのは他のオブジェクトから依存させないようにして独立させる意味もあるので
テストするためにpublicにしますっていうのは僕はやっぱり反対ですね
0008デフォルトの名無しさん
垢版 |
2020/07/05(日) 21:04:50.23ID:MQ9nuMmc
僕が書いたように同じオブジェクトにテストコードも書いちゃえば良いと思います
0009デフォルトの名無しさん
垢版 |
2020/07/05(日) 21:07:40.54ID:M+BkbwUs
>>7
微妙でもなんでもねーよ
Mainクラスに関係ない処理を入れるな

これは小さいサンプルだが、大きくなった時
Mainクラスに、そんな処理はいってたらおかしいだろ
なんで(大きくなったコードの)その他の部分は別のクラスにあるのに
この処理だけMainクラスにあるんだ?って
0010デフォルトの名無しさん
垢版 |
2020/07/05(日) 21:09:37.34ID:MQ9nuMmc
>>9
Mainクラスと関係ある処理だからMainクラスにあるんじゃよ
Mainクラスからしかアクセスしないからprivateなんじゃよ
テストするためにpublicにするのはおかしいのじゃよ
0011デフォルトの名無しさん
垢版 |
2020/07/05(日) 21:11:26.55ID:M+BkbwUs
>>10
Mainクラスと関係ある処理だから?

じゃあ名前が悪いよね。
誰が「Mainクラス」と聞いて
その中にある処理を想像できるんだ?w
0012デフォルトの名無しさん
垢版 |
2020/07/05(日) 21:13:00.77ID:MQ9nuMmc
>>11
えっと、前にも言ったけどpaizaはMainという名前じゃないと動かないんだよ
Mainとわけてクラスを作ることもできるけど面倒だからやらなかっただけ
普通のプログラマならpaizaの制約ぐらい知ってるだろうし説明する必要もないと思ってた
君の無知さを想像できなかった僕のミスだ
0013デフォルトの名無しさん
垢版 |
2020/07/05(日) 21:13:24.90ID:MQ9nuMmc
君が無知すぎてごめん
0014デフォルトの名無しさん
垢版 |
2020/07/05(日) 21:14:24.05ID:MQ9nuMmc
誠にごめんなさい
0015デフォルトの名無しさん
垢版 |
2020/07/05(日) 21:14:43.14ID:M+BkbwUs
>>12
だから分けろって。設計がおかしいだろ。

Mainクラスにメインの処理を入れるな
設計が悪いって言ってるのになんで理解できない?
0016デフォルトの名無しさん
垢版 |
2020/07/05(日) 21:15:37.89ID:M+BkbwUs
プライベートをテストしたいっていうのは
本質的に設計が悪いってことが理解できないやつ
もしくは設計なんてしたことがないやつなんだろう
0017デフォルトの名無しさん
垢版 |
2020/07/05(日) 21:15:45.13ID:MQ9nuMmc
>>15
てめえでやれやハゲ
0019デフォルトの名無しさん
垢版 |
2020/07/05(日) 21:17:00.58ID:MQ9nuMmc
>>16
君は簡単なロジックしか組む機会がなかった幸せな人だと思うよ
僕は君が羨ましい、幸せな人生を歩んでいるね
0020デフォルトの名無しさん
垢版 |
2020/07/05(日) 21:17:17.30ID:MQ9nuMmc
>>18
やってない君が不正解だね
0021デフォルトの名無しさん
垢版 |
2020/07/05(日) 21:19:16.27ID:MQ9nuMmc
僕は下痢便コードをこうするべきって修正したよ
paizaで動くようにMainというクラス名に変えたけどね
paizaだからそうなるよねってみんな理解してくれるものと思ってた
paizaを知らない木偶の坊がクラス名に文句つけてきたとき僕は絶望した
0022デフォルトの名無しさん
垢版 |
2020/07/05(日) 21:20:28.56ID:Xwol7cCi
まだやってたのかw
>>5みたいな下痢便コードが出てきた時点で
「あっ・・・(察し)」でスレ終了でしょ
0023デフォルトの名無しさん
垢版 |
2020/07/05(日) 21:21:29.14ID:MQ9nuMmc
こうするべきだと思うならやれば良いがな
自分でやりもせず他人に文句いうだけの人間は木偶の坊のそしりを免れないよ
0024デフォルトの名無しさん
垢版 |
2020/07/05(日) 21:22:53.14ID:M+BkbwUs
Mainに他のクラスの処理を全て同居させる

全部Mainにあるから呼び出せるよね?と
publicメソッドをprivateメソッドに変更

publicメソッドはMainのみ!
と言い

あぁ、プライベートメソッドのテストができない〜と嘆く(笑)

アホなのか?自分でテストできないようにクソ設計に変更して
自業自得じゃんw
002522
垢版 |
2020/07/05(日) 21:23:27.95ID:Xwol7cCi
×>>5みたいな下痢便コードが出てきた時点で
>>3みたいな下痢便コードが出てきた時点で

すまん訂正
0026デフォルトの名無しさん
垢版 |
2020/07/05(日) 21:25:43.01ID:MQ9nuMmc
>>24
君はまだMainという名前のレトリックから抜け出せてないように見える
paizaで動かすためにMainという名前にしたってだけだから
実際にはそれなりの名前になるでしょう
privateメソッドは当然クラスと関係あるものになるでしょうということ

Mainという名前に囚われ過ぎておられるように見受けられる
自分だったらこう書くのにって言うのがあるならそれを実践してみるべきかと思われます
0027デフォルトの名無しさん
垢版 |
2020/07/05(日) 21:25:44.19ID:M+BkbwUs
おそらく設計とは何かを知らずに、
ただ動けばいいと思ってるんだろう

テストしやすく設計するのも
設計の一つ
0028デフォルトの名無しさん
垢版 |
2020/07/05(日) 21:26:22.28ID:MQ9nuMmc
>>27
Mainを勘違いしてたアホが何抜かしとんねん
0031デフォルトの名無しさん
垢版 |
2020/07/05(日) 21:27:05.17ID:MQ9nuMmc
謙虚になれや
オブジェクト指向とは礼儀作法と心得よ
0032デフォルトの名無しさん
垢版 |
2020/07/05(日) 21:27:44.35ID:MQ9nuMmc
>>30
はいはいもうえーから
0033デフォルトの名無しさん
垢版 |
2020/07/05(日) 21:27:45.52ID:Xwol7cCi
>>27
Mainクラス云々については単に誤解してると思うけど
このスレの登場人物じゃあ多分おまいが一番マシな感性持ってそうやなw
0034デフォルトの名無しさん
垢版 |
2020/07/05(日) 21:28:41.91ID:MQ9nuMmc
>>29
作ってへんやんけ
0035デフォルトの名無しさん
垢版 |
2020/07/05(日) 21:28:59.67ID:MQ9nuMmc
やりもせずに何抜かしとんねん
0036デフォルトの名無しさん
垢版 |
2020/07/05(日) 21:29:55.13ID:MQ9nuMmc
ほんま口だけやな
0038デフォルトの名無しさん
垢版 |
2020/07/05(日) 22:53:15.98ID:VS9zJ3bZ
このスレの主旨的にはprivateメソッドのテストコードを書きたいんだよね?
書く必要がないって主張は違うよね?
0041デフォルトの名無しさん
垢版 |
2020/07/05(日) 23:27:01.94ID:cdjjBT1g
スレタイと書いてあることがチグハグで趣旨が解りづらいな。
スレタイに従えば、privateを呼び出したいみたいだが、>>1の発言を見るとprivateの呼び出しは推奨しないように見える。
まぁ、私も推奨しないけど。

という訳で、適当に独り言を語ってみる。

単体テストって、例えば...
Queueという名前のクラスがあって、そのクラスの中に
Enqueue、Dequeue、Peek、Clearメソッドが定義されていたら、それらメソッドを呼び出して、その結果を予想するコード(テストコード)を書いて実行させる方法がオブジェクト指向プログラマーにとって一般的だと思うけど...その際にprivateメソッド(内部実装)をテストコードから呼び出さないといけない理由がわからん。
0042デフォルトの名無しさん
垢版 |
2020/07/05(日) 23:28:17.41ID:LRfXHt7v
t-wadaさんがどういう人か調べてみたところ、日本が誇るJavascript使いなんだな。
すると、t-wadaさんの立場ではprivateをテストしないというのは全くもって正しいと思う。
privateでやる事はライブラリを呼び出すだけなので、テストするのは無駄。

しかし、他の言語ではアルゴリズムの実装という仕事があり、アルゴリズムの実装をテストしたいという要求は常に存在する。
0043デフォルトの名無しさん
垢版 |
2020/07/05(日) 23:48:39.22ID:LRfXHt7v
例えば多くのパーサーは公開メンバとしてpush()を持つ。
文字をプッシュする関数だ。
めぼしい公開メンバはこの程度しかない。

しかしその裏に100を超える非公開のメンバがあっても驚かない。
非決定性のパーサはその程度のメンバを持つ。

文字をプッシュする公開メンバ一つで、多くの状態、多くのメンバをテストするのは面倒な話で、何方にせよ非公開のメンバ、非公開の状態変数について知識が無ければテストできない。
だったら内部の状態について一切テストしないか、内部の状態を直接テストするか二択となる。

内部の状態についてはブラックボックスとして扱うべきと述べているのがt-wadaさんだが、それでは実装が非常に困難だ。
0044デフォルトの名無しさん
垢版 |
2020/07/05(日) 23:55:21.34ID:LRfXHt7v
パーサーの話ついでに、もう一つアイデアを提供しよう。
決定性パーサーでは、還元が行われたとき、外部に影響を及ぼす。
通常この時点で意味動作を行う。
t-wadaさんは、この時に限りテストを行うべきであり、それ以外でテストを行ってはいけないと述べる。

つまり、シフトが行われるときはテストしてはならない。
今どの状態にあるかは外部にかかわりのない事なのでテストとしてはならない。
入力文字として改行を与えるとどの状態に遷移するかテストしてはならない。

これは厳しすぎやしないだろうか?
0045デフォルトの名無しさん
垢版 |
2020/07/06(月) 00:01:34.67ID:NTI0gQuc
詳細を知ってはならないということは、どの状態を経てその記号が生み出されたのか知ってはならないということであり、これは非常につらい。
0046デフォルトの名無しさん
垢版 |
2020/07/06(月) 00:03:58.43ID:NTI0gQuc
システム利用者がシステム作者に「詳細を検査しちゃだめじゃないか!」と怒っているように見える。
0048デフォルトの名無しさん
垢版 |
2020/07/06(月) 00:27:13.73ID:NTI0gQuc
クリスマスプレゼントが何かを知るために箱を振って音を聞くよりも、箱を開けて直接見るほうが早い。
0049デフォルトの名無しさん
垢版 |
2020/07/06(月) 00:29:02.17ID:NTI0gQuc
箱を振って「プレゼントはプリキュア」と観測できたとする。
これは果たしてどの程度もっともらしいだろうか?
0050デフォルトの名無しさん
垢版 |
2020/07/06(月) 01:18:51.21ID:gvRhXNla
privateなメソッドの動きが仕様書で定義されてたらテストしなくちゃいけないし書いてなかったら書く必要無い
そしてprivateなメソッドの仕様まで定めた仕様書は俺は見たことない
0053デフォルトの名無しさん
垢版 |
2020/07/06(月) 07:37:12.27ID:ODctk1XU
>>50
仕様書には普通アクセス修飾子を何にするかなんて書かないからね
設計書にもそんな細かいこと書かないでしょ
0054デフォルトの名無しさん
垢版 |
2020/07/06(月) 07:38:08.27ID:cDMo9043
書いてない関数を勝手に作るなんて禁止に決まってるだろ
テストのためだけに関数は作らない
0056デフォルトの名無しさん
垢版 |
2020/07/06(月) 08:00:23.42ID:ODctk1XU
関数を作るのに許可がいるなんてすごいことだからとてもすごいと思いました
0057デフォルトの名無しさん
垢版 |
2020/07/06(月) 09:07:12.86ID:aZiq8mUC
>>1にはテストとしか書かれていないけど、記事元はユニットテスト(単体テスト)の話だよね?
0061デフォルトの名無しさん
垢版 |
2020/07/06(月) 12:27:52.10ID:aZiq8mUC
>>59
自分であたかも他のテストがあるように言っておいて変な話だがだが、しないね。

単体テストで不具合を見つけた後、デバッガを使って更にどこにバグの原因が潜んでいるのか分析することはあるけど、それはもはやテストではなくデバッグだしね。
0062デフォルトの名無しさん
垢版 |
2020/07/06(月) 12:34:18.82ID:aZiq8mUC
てかさ、タイトルがカプセル化なのに、なんで>>3>>5もテストコード実行場所とテストコード実行場所が同じ階層に記述されているのさ。
0063デフォルトの名無しさん
垢版 |
2020/07/06(月) 12:35:06.14ID:aZiq8mUC
ミス。テストコード実行場所とテスト対象が同じ階層に書かれているのはなんで?だ。
0064デフォルトの名無しさん
垢版 |
2020/07/06(月) 14:43:00.46ID:NTI0gQuc
和田理論は穴が多くてお話にならないな。
0066デフォルトの名無しさん
垢版 |
2020/07/06(月) 14:51:45.46ID:NTI0gQuc
和田理論に騙された人は抗議したほうが良い。
0067デフォルトの名無しさん
垢版 |
2020/07/06(月) 14:54:43.27ID:EsDpeV3E
wadaは忘れろ

privateだからテストしなくていいなどという都合のいい法則は存在しない だがprivateだからとテストをしないキチガイは確実に存在するのだ
0068デフォルトの名無しさん
垢版 |
2020/07/06(月) 15:05:56.82ID:NTI0gQuc
和田理論被害者の会ひつよう。
とてもひつよう。
0069デフォルトの名無しさん
垢版 |
2020/07/06(月) 15:07:12.95ID:bo8iccWD
一意見を急に”理論”とか”法則”とか言う方が頭どうかしてるよ

t-wadaはTDDをわかりやすく解説することに定評があるだけ
ただいろんな会社からテストのコンサルティングで雇われる程度には有能だから
君たちの意見よりは一般には受け入れられやすい
0070デフォルトの名無しさん
垢版 |
2020/07/06(月) 15:10:07.70ID:NTI0gQuc
和田理論被害者の会ニューヨーク支部もひつよう。
とてもひつよう。
0072デフォルトの名無しさん
垢版 |
2020/07/06(月) 15:14:01.90ID:NTI0gQuc
前スレで王家秘伝のレシピ教えたのに。
誰も活用しないんだな。
0073デフォルトの名無しさん
垢版 |
2020/07/06(月) 15:17:52.38ID:NTI0gQuc
俺も活用していないわそういえば。
0074デフォルトの名無しさん
垢版 |
2020/07/06(月) 15:18:30.87ID:9+hHOd2F
>>61
> 単体テストで不具合を見つけた後、デバッガを使って更にどこにバグの原因が潜んでいるのか分析することはあるけど、それはもはやテストではなくデバッグだしね。

単体テストで不具合を見つけた後にするもの=デバッグ
デバッグの前にする不具合を見るけるもの=テスト

だろ?

テストの後にするデバッグは、テストではなくデバッグだしねって
あんた何言ってるの?
0075デフォルトの名無しさん
垢版 |
2020/07/06(月) 16:05:37.75ID:n2uckING
オブジェクト指向の話をしよう

彡ミ
↓↓↓
彡 ⌒ ミ
(´・ω・`) 頭皮、毛髪に触れるものは全て検査する
0076デフォルトの名無しさん
垢版 |
2020/07/06(月) 17:22:23.35ID:aZiq8mUC
>>74
そんな細かいこと気にすんなよ。揚げ足取りめ。
よく単体テストは不具合を見つけるためにやると言われるが、別視点の考え方もあるって話だ。

ここでは些細な話だったな。
0077デフォルトの名無しさん
垢版 |
2020/07/06(月) 17:32:36.88ID:zkbL7M3i
>>74
> テストの後にするデバッグは、テストではなくデバッグだしねって
> あんた何言ってるの?

テストの後にするデバッグはデバッグでしかないと思いますけど、どこに突っ込みを入れたいのですか?
0080デフォルトの名無しさん
垢版 |
2020/07/06(月) 22:24:42.23ID:djm9krVS
まだプログラミング教室やってんのかw
0082デフォルトの名無しさん
垢版 |
2020/07/07(火) 11:33:22.19ID:hnvy2tUT
もしかすると、バグの原因を調査する作業はテストに含まれるかどうかって話かな?
0083デフォルトの名無しさん
垢版 |
2020/07/07(火) 11:34:20.85ID:zTLocdwC
和田メソッド被害者の会に入れてほしいです。
0084デフォルトの名無しさん
垢版 |
2020/07/07(火) 11:40:38.80ID:YBf2Aagc
>>81
当たり前だろ?
テストではなくデバッグだしねっていうのが意味わからんって言ってる
テストはテストだろ
0085デフォルトの名無しさん
垢版 |
2020/07/07(火) 12:01:27.16ID:hnvy2tUT
突っ込みどころねーじゃんw
それなのに喧嘩腰で突っ込んで周囲に突っ込まれただけか。
0087デフォルトの名無しさん
垢版 |
2020/07/07(火) 12:25:55.22ID:NlNPNtxk
privateのチェックって具体的にどうやるの?
Queueというクラスをテストするケースを例に教えて。
0088デフォルトの名無しさん
垢版 |
2020/07/07(火) 12:31:21.40ID:jam8vymb
queue = Queue()
queue.push(17)
asserEqual( queue.length, 1)
a = queue.pop()
assertEqual( a, 17)
assertEqual( quele.length, 0)

だいたいこんなもんだろ。
0089デフォルトの名無しさん
垢版 |
2020/07/07(火) 12:37:00.92ID:NlNPNtxk
>>88
おお、俺もそんなのイメージしてた。
そんなコードでpublic経由でprivateを呼び、ついでにカバレッジテストとか済ませる感じかな。

...だったらいいのだが、なーんか、このスレの人達の言動を見ていると怪しいんだよな。
88は別に問題ないけど。
0090デフォルトの名無しさん
垢版 |
2020/07/07(火) 12:56:17.65ID:NlNPNtxk
カバレッジテストをするかどうかは、ケースバイケース。どちらでもいいとして、一番気にしているのは、そもそも>>1の記事主に批判的な人はオブジェクト指向を理解しているのか?という点。
怪しいというのは、そこね。
0091デフォルトの名無しさん
垢版 |
2020/07/07(火) 13:10:52.54ID:YBf2Aagc
>>85
デバッグはテストじゃなくてデバッグだしねと言われても当たり前としか言えないし、
デバッグの前にやるテストはテストだしねで終わりだろ?
0092デフォルトの名無しさん
垢版 |
2020/07/07(火) 13:14:04.43ID:zTLocdwC
>>91
言いたいことは何となく理解できる。
「私以外はみんな馬鹿」
ってことだろ?

つまりキミの主な言語はJava。
0093デフォルトの名無しさん
垢版 |
2020/07/07(火) 13:19:42.71ID:zTLocdwC
どうやら図星だったようですね。

Javaではありがちなんですよ。
0094デフォルトの名無しさん
垢版 |
2020/07/07(火) 13:28:08.57ID:RJk/Rw+W
>>91
とまぁ、>>92みたいな低能が蔓延るスレで世間の常識は通用しないってことが証明されちゃったわけだ。
立ち去るがいい。
0096デフォルトの名無しさん
垢版 |
2020/07/07(火) 14:34:40.27ID:zTLocdwC
>>95
Java!Java!
0097デフォルトの名無しさん
垢版 |
2020/07/07(火) 14:48:31.09ID:zTLocdwC
>>95
馬鹿にしてない。
馬鹿に付ける薬はない。
0098デフォルトの名無しさん
垢版 |
2020/07/07(火) 14:56:56.51ID:zTLocdwC
オブジェクト指向はダメなんじゃないか?というのが前スレの趣旨で、非公開のメンバは何のためにあるの?テストどうするの?という話になった。

それに対する回答が「非公開のメンバはブラックボックスとして扱いテストしてはならない」という和田メソッドが示された。

それに対して「入力に使われる一つのメンバしかもたないパーサ」という実例を挙げ、「文字列を入力され構文木を返すような状態機械のテストが非常に困難」という話が出た。
この場合、内部を観測できないのであれば、すべての入力の組み合わせ(受理できない入力もテストするなら、それは無限である)に対して、すべての取りうる構文木のセットを検査しなければならない。
つまりそれは太陽系よりもはるかに広く、銀河の向こうまでテストするということである。

それに対して「オブジェクト指向を知らない」などと抜けたことを言うので、「Java!」という結論が出された。
0099デフォルトの名無しさん
垢版 |
2020/07/07(火) 15:04:16.80ID:YBf2Aagc
> それに対する回答が「非公開のメンバはブラックボックスとして扱いテストしてはならない」という和田メソッドが示された。

正確には

・パブリックメソッド経由でテストする
・別クラスのパブリックメソッドとする
・テスト対象の可視性を(やや)上げる
・プライベートのまま、リフレクションでアクセスしてテストを書く

まとめ
繰り返すと、プライベートなメソッドや関数をテストする必要は無いと考えています。
プライベートなメソッドは、実装の詳細であるからです。
0100デフォルトの名無しさん
垢版 |
2020/07/07(火) 15:05:58.19ID:O+C/kGAG
実装の詳細ならむしろテストが必要だと思うのだけど
なんで詳細だからテストしなくて良いのだろう
t_wada被害者の会に僕も入会させてください
■ このスレッドは過去ログ倉庫に格納されています