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

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

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

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

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

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

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

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

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

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

別クラスのパブリックメソッドとする
プライベートなメソッドのテストを書きたいということは、実はテスト対象の責務が多すぎることを示唆している場合があります。
テストがどうしても書きたい場合は、その責務はテスト対象のプライベートな振る舞いではなく、他の誰かのパブリックな振る舞いなのでしょう。
451デフォルトの名無しさん
垢版 |
2020/07/29(水) 23:30:32.60ID:eNj62kDo
ポリモーフィズムって押し付けなんだよね
汎用的な機能を提供する
与える引数だけが戻り値を決めるような
純粋な関数を1つくればDRYになっていいものを、

何らかの意図を持った特化した関数を
幾つも定義しなければならない
意味がわからない。

インスタンスには極力状態を持たせない方が
圧倒的にバグが少ない

UI制御の状態ならGUI上だけで
本当に重要な状態ならDB上やセッションとかで
持つくらいで大体は事足りる
クラスのフィールドなんてほとんど使わんよ

引数と戻り値
配列 連想配列をとことん突き詰めれば
大抵の事はなんでも出来る。
これが構造化プログラミング
2020/07/29(水) 23:41:24.99ID:JOuph4+C
ttps://i.imgur.com/qRx3DMV.gif
2020/07/30(木) 00:11:51.67ID:3OVhn9K/
>>451
それが設計意図がキチンとドキュメントにまとまっていれば
こうなったときに引数増やすしか無いかとかわかるんだけど
だいたいドキュメント書かないバカがノリで作ったようなポリモだから
頭にくるんだよね
作ったやつのおバカなドヤ顔に拳をブチ込んでその場で正座させながらドキュメント書かせたい
2020/07/30(木) 08:29:08.61ID:aMAEXQwY
>>451
単純にモジュール切り分けテクニックの一つなだけだよ。
変な切り分けすればそりゃ可読性悪くなるわ。
オブジェクト指向をいつでもすべしみたいな馬鹿が誤解をひろめたのがいかんだけで有用なテクニックの一つではある。
455デフォルトの名無しさん
垢版 |
2020/07/30(木) 10:11:39.63ID:6431nXoC
ドキュメントとセットでの運用なら、
それ自体では完結してない、つまりは欠陥品ってことでしょ

ドキュメントの有無や書いた奴の頭の程度で決定したりはしない
2020/07/30(木) 10:58:41.66ID:P2gSGZs3
>>455
visualstudioがWordやExcelと連携してくれれば楽なのにね
457デフォルトの名無しさん
垢版 |
2020/07/30(木) 12:33:29.09ID:6431nXoC
コードそのものが「文芸的」になる必要がある
2020/07/30(木) 13:15:44.34ID:XKQCIMIB
ソリューションエクスプローラーなんて芋っポイのやめてWordの項目一覧でいいよ
そこの項目に対応したソースを記述すればいい
459デフォルトの名無しさん
垢版 |
2020/07/30(木) 13:21:46.37ID:odFw/CMl
ソリューションエクスプローラのCMakeターゲットビュー見てみろよ。
そんなこと言えなくなるだろ。
2020/07/30(木) 13:24:30.25ID:XKQCIMIB
ドキュメント主導型にして欲しい
461デフォルトの名無しさん
垢版 |
2020/07/30(木) 13:28:55.06ID:odFw/CMl
それはちょっと違うかもしれないな。
プログラミング言語は自然言語と比較して非常に制約がきつく、それは機械が読めるほどだ。
自然言語で書くよりもプログラミング言語で書く方が誤解の余地が少ない優れた文書になるのではないか。
462デフォルトの名無しさん
垢版 |
2020/07/30(木) 14:36:27.17ID:jRBN85oj
data Status = Dead | Alive

you == not Alive

お前はもう死んでいる
2020/07/31(金) 00:38:15.14ID:91XEAcCM
https://img.gifmagazine.net/gifmagazine/images/710205/original.gif
2020/07/31(金) 00:57:13.70ID:QZ7aSShZ
http://imgcc.naver.jp/kaze/mission_anm/USER/20140905/93/994463/52/250x186x42178393ac27032c611b2149.gif
2020/07/31(金) 01:01:24.69ID:QZ7aSShZ
http://imgcc.naver.jp/kaze/mission_anm/USER/20140905/93/994463/79/326x205x7ffb3f5b8763642d29df7d79.gif
2020/07/31(金) 07:44:49.12ID:0J+iX777
>>455
プログラムで表現しずらいものをドキュメントで補うんだよ。
SIerに提出するような糞アリバイドキュメントばっかりつくってると理解できないだろうけれど。
467デフォルトの名無しさん
垢版 |
2020/07/31(金) 09:46:54.45ID:UpUkpE84
プライベートメソッドのドキュメントを作るんだろ?
欠陥品じゃん
2020/07/31(金) 12:50:08.54ID:0J+iX777
プライベートだろうとパブリックだろうと、構造がコードでわかりにくけりゃ作るよ。
そういう表面的なことでしか判断できないのは頭が悪い証拠だと思うよ。
469デフォルトの名無しさん
垢版 |
2020/07/31(金) 13:53:02.12ID:J/Hsbz2N
和田信者は頭が欠陥品
2020/07/31(金) 15:26:19.59ID:+g+2reUI
要するに馬鹿にはプログラミングさせるなということだな
馬鹿が書くと変なものをprivateにしてしまって大混乱
プライベートメソッドをテストせざるを得なくなる
471デフォルトの名無しさん
垢版 |
2020/07/31(金) 20:54:13.68ID:UpUkpE84
普通は表面的=形式的なモンで判断するんでしょこの業界
だって形式しかねーもん
2020/08/01(土) 01:42:55.39ID:JfG80/LC
構造図みたいなのはプログラム内には書けないから
それは文章化しておくしかないから仕方がない
2020/08/01(土) 13:40:53.00ID:ZqZOxFea
https://i.imgur.com/HrbzgM9.gif
2020/08/03(月) 01:10:10.92ID:WN+omvah
https://i.imgur.com/qRx3DMV.gif
475デフォルトの名無しさん
垢版 |
2020/08/30(日) 15:04:18.01ID:i3Iv6gG3
>>397
>相変わらずオブジェクト指向信じて
>頑張ってるJavaプログラマさん達に
>お伺いしたいんだけどさぁ

ならば「チンポがシコシコする」という日本語表現は、文法的に正しいのか?

チンポ「を」シコシコするのではなくて、チンポ「が」シコシコする。この場合、「チンポ」は主語となる。

オブジェクト指向で言う「集約」は2種類あって、全体(俺)と部分(チンポ)が繋がっている場合と、
全体(俺)と部分(チンポ)が別々になっている場合とが考えられる。けれども「チンポ」はそれ自体
が独立した生き物であり、所有者の意思とは無関係に、勃起して「シコシコする」。
例えば寝てる時にエロい夢みて朝起きてみたらチンコが勃起して射精してたとか。

違うか?

「胸がドキドキする」は良いが、「チンポがシコシコする」はダメな理由を、50字以内で述べろ!
2020/11/16(月) 10:13:57.47ID:PECNoX7v
>>397
要するに君のスペックや君が手掛けてきたシステムは
オブジェクト指向を検討する程のものじゃなかったし
今後もオブジェクト指向を検討するようなシステムに
君が係ることもなんだろうということは理解できた
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況