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

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

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

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

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

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

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

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

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

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

別クラスのパブリックメソッドとする
プライベートなメソッドのテストを書きたいということは、実はテスト対象の責務が多すぎることを示唆している場合があります。
テストがどうしても書きたい場合は、その責務はテスト対象のプライベートな振る舞いではなく、他の誰かのパブリックな振る舞いなのでしょう。
402デフォルトの名無しさん
垢版 |
2020/07/26(日) 10:36:11.38ID:XQciIU0B
PythonやJavaScriptがイケてる言語であることは間違いない
Javaよりも開発者多いのじゃないかな

PythonはAIで使われているし大学の授業でも使われていて
それまでC言語で教えてた内容をPythonで教えるようにしたら
学生の成績が飛躍的に上がったという話がある
人間の認知能力に最適な言語

JavaScriptはWebのクライアントでもサーバでも使われていて
日進月歩で進化している最も熱い言語
403デフォルトの名無しさん
垢版 |
2020/07/26(日) 10:45:55.24ID:XQciIU0B
Javaは昔はオブジェクト指向一筋の堅物みたいな感じだったけど
最近はラムダ式やStream、CompletableFutureの導入など
どちらかというと関数型の方に傾倒していて、オブジェクト指向と関数型の
良いとこ取りをしようとしてる
2020/07/27(月) 06:13:01.93ID:czX+V0Vr
javaに限った話ではない
405デフォルトの名無しさん
垢版 |
2020/07/27(月) 09:27:57.59ID:EH5Hzntf
そもそも単体で平置き出来る関数が出来るまでバカみたいに長い年月が掛かったからその間に他の言語に抜かされていった
2020/07/27(月) 12:53:06.35ID:uT7O59Px
オブジェクト指向もテストの文脈で語られるようになって、
だいぶ胡散臭い馬鹿が減ったと思う。
407デフォルトの名無しさん
垢版 |
2020/07/27(月) 13:33:10.26ID:EH5Hzntf
胡散臭くない小奇麗なバカは減って無い、ってことだな
408デフォルトの名無しさん
垢版 |
2020/07/27(月) 15:11:13.32ID:JMeMRaZ4
論理的には間違ってる
2020/07/27(月) 21:43:04.96ID:bbLqvN0i
>>405
「体で平置き出来る関数」ってどんなの?
2020/07/27(月) 21:54:44.65ID:qUTrza9Z
TDDに限定するならともかく、一般論として「テストの文脈で」語ろうとするのは
逆にそっちの方が胡散臭いなぁ。
2020/07/28(火) 04:52:38.60ID:8gdXVNyA
「体で平置き」とか体育会系っぽいな
2020/07/28(火) 19:28:28.71ID:CaGFADkT
平置き出来る関数って何?
2020/07/28(火) 23:55:37.61ID:+i8brD7d
第一級関数の事じゃね
2020/07/29(水) 00:11:33.88ID:ap0sh9Fh
class/object instance scopeにあるmethodではない関数または関数objectのことではないかいな
2020/07/29(水) 02:31:20.73ID:TpnjQV/H
無能は言葉を知らない
2020/07/29(水) 07:34:13.23ID:m6wyrrlf
俺様定義でしゃべるヤツが多いけどな
2020/07/29(水) 07:49:48.28ID:Jlc+lISV
「平置き出来る関数」なんてどこの村で通じる方言なん?
418デフォルトの名無しさん
垢版 |
2020/07/29(水) 08:44:34.08ID:yJ6wpcWu
文脈でわかると思うけどね
自分の辞書にないからわからないというやつはただのアホ
419デフォルトの名無しさん
垢版 |
2020/07/29(水) 08:52:18.07ID:yJ6wpcWu
慎吾ママが両手を広げて「おっはー」と言ったらおはようの意味だとわかるし
貴乃花親方がドアを開けて「あーす」と言ったらおはようございますの意味だとわかるだろ
「平置きできる関数」がわからない人は自分が八角理事長だと自覚したが良い
2020/07/29(水) 09:00:12.23ID:WjPZZ4ye
その流れなら「ひっらー」だろ
平沖出来る関数は
2020/07/29(水) 10:11:11.33ID:TpnjQV/H
他人と議論をしようと言う時に文脈でしかわからない言葉を使うな無能が
422デフォルトの名無しさん
垢版 |
2020/07/29(水) 11:23:16.72ID:yJ6wpcWu
>>421
文脈がわからない人間が議論に参加するべきではないと思うの

他人の言葉には寛容に、自分の言葉は厳密にが会話の基本
議論は会話の積み重ねなんだから会話の基本ができない人間は議論ができない人
他人の言葉に厳しい態度とっても良いことなんて無いよ
423デフォルトの名無しさん
垢版 |
2020/07/29(水) 11:26:28.92ID:yJ6wpcWu
プログラムでもそうだよね
メソッドを宣言するときは引数はできるだけ広い型
戻り値はできるだけ狭い型
にすることで他のオブジェクトと協調しやすいプログラムができる
なんでもかんでもインターフェイス使おうとするJavaの習慣は誠に遺憾
424デフォルトの名無しさん
垢版 |
2020/07/29(水) 11:27:35.62ID:yJ6wpcWu
他人には厳しいみなさん
425デフォルトの名無しさん
垢版 |
2020/07/29(水) 11:33:51.35ID:2AXsdL6T
自分の説明能力の無さを相手が低脳だからと責任転嫁するヤシ
426デフォルトの名無しさん
垢版 |
2020/07/29(水) 11:36:20.63ID:yJ6wpcWu
我々人間もメソッドなのかも知れませんね
2020/07/29(水) 11:38:34.39ID:10XNhQ52
>>422
> 自分の言葉は厳密にが会話の基本
いやだよばーかw
俺の言葉は寛容にだ。平置きでわからんやつが悪い
お前は俺の言葉に寛容になれな。
428デフォルトの名無しさん
垢版 |
2020/07/29(水) 11:38:43.76ID:yJ6wpcWu
自分の理解能力の無さを相手が無能だからと責任転嫁するココナツ
429デフォルトの名無しさん
垢版 |
2020/07/29(水) 11:39:49.67ID:yJ6wpcWu
>>427
僕は平置きでわかる派ですよ
完全に理解した
2020/07/29(水) 11:41:33.11ID:1IRv8wde
で、結局のところ
Javaで「単体で平置きできる関数」って何なの?

コードで示してくれるといいんだか
431デフォルトの名無しさん
垢版 |
2020/07/29(水) 11:42:06.25ID:yJ6wpcWu
>>430
() -> "coconut"
2020/07/29(水) 11:43:59.64ID:Lu0VWFvI
>>431
んん? それどこに置いてるの?
2020/07/29(水) 11:54:07.92ID:10XNhQ52
>>430
単体でおける関数ってわかりますよね?
それを平置きするんですよ
434デフォルトの名無しさん
垢版 |
2020/07/29(水) 12:47:42.81ID:yJ6wpcWu
>>432
どこだと思う?
435デフォルトの名無しさん
垢版 |
2020/07/29(水) 13:01:46.48ID:yJ6wpcWu
無限ココナツ
Stream.generate(() -> "coconut").forEach(System.out::println);
436デフォルトの名無しさん
垢版 |
2020/07/29(水) 13:03:28.35ID:yJ6wpcWu
変数にセット可能、引数として渡すことができる、戻り値にセットできる
これが平置き三原則
437デフォルトの名無しさん
垢版 |
2020/07/29(水) 13:06:58.34ID:vCcy0xOf
Javaはクラスに包んで間接的に置くしかない
これが最大の欠陥
438デフォルトの名無しさん
垢版 |
2020/07/29(水) 13:29:06.56ID:Lu0VWFvI
単体でもなければ平置きでもなくて草生える
2020/07/29(水) 13:34:14.86ID:XTBRGYt/
用語はともかくラムダ式のことだと分かってスッキリした
2020/07/29(水) 16:49:02.49ID:jnMYxU1A
二つ折りじゃないですか!
2020/07/29(水) 18:21:34.93ID:TpnjQV/H
第一級函数のことかと思ったよ俺は
馬鹿は1つしかモノを知らないから適当に言っても1つの意味にしかならないが他人はお前よりモノを知ってるから第一級函数なのかラムダ式なのかそれとも自分が知らない別の概念なのか判断できないんだよ
2020/07/29(水) 18:32:59.18ID:T5TGNuPi
結局単にラムダ式のことを言おうとしてたん?
それだけのことをなぜ平置きとか言い出しちゃったのかなw

見苦しいからもうこれ以上レスいらんぞ
443デフォルトの名無しさん
垢版 |
2020/07/29(水) 18:34:25.78ID:yJ6wpcWu
平置き式のこと?
2020/07/29(水) 18:35:43.73ID:jnMYxU1A
平置きとかメルカリ用語じゃねーのか
445デフォルトの名無しさん
垢版 |
2020/07/29(水) 18:40:24.30ID:yJ6wpcWu
単体で置ける関数のことを単体関数と言い、それを平置きして式化したものが平置き式
ラムダ式なんて西洋かぶれのバズワードを使わなくても説明できるのができるプログラマ
2020/07/29(水) 18:43:48.50ID:T5TGNuPi
必死かコイツ
2020/07/29(水) 18:59:31.61ID:zMv38iUQ
みーっけた!
こうゆう関数併記するスタイルの事じゃないの?
プログラミングのお題スレ Part18
http://itest.5ch.net/mevius/test/read.cgi/tech/1594702426/124
https://github.com/katahiromz/3D

function add_line(x0, y0, z0, x1, y1, z1) {
}
function set_pos(x, y, z) {
}
function set_dir(dx, dy, dz) {
}
function walk(delta) {
}
function turn_dir(dx, dy, dz) {
}
function turn_angle(angle) {
}
function init() {
}
function koch(degree, step) {
}
function draw() {
}
function animate() {
}
2020/07/29(水) 19:19:06.70ID:bUZt8h4Z
それは関数を単体でおいただけ
平置きとは違う
449デフォルトの名無しさん
垢版 |
2020/07/29(水) 20:44:56.64ID:f9ldngpW
フォルダに平積みする事か?
A.class
B.class
C.class
D.class
E.class
2020/07/29(水) 20:48:45.31ID:kq2jMqPx
本の平積みと同じ意味だよ
平にするって所を強調したいんだ
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ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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