X



カプセル化■プライベートメソッドをテストする方法
■ このスレッドは過去ログ倉庫に格納されています
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つの考え方があります。

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

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

別クラスのパブリックメソッドとする
プライベートなメソッドのテストを書きたいということは、実はテスト対象の責務が多すぎることを示唆している場合があります。
テストがどうしても書きたい場合は、その責務はテスト対象のプライベートな振る舞いではなく、他の誰かのパブリックな振る舞いなのでしょう。
0426デフォルトの名無しさん
垢版 |
2020/07/29(水) 11:36:20.63ID:yJ6wpcWu
我々人間もメソッドなのかも知れませんね
0427デフォルトの名無しさん
垢版 |
2020/07/29(水) 11:38:34.39ID:10XNhQ52
>>422
> 自分の言葉は厳密にが会話の基本
いやだよばーかw
俺の言葉は寛容にだ。平置きでわからんやつが悪い
お前は俺の言葉に寛容になれな。
0428デフォルトの名無しさん
垢版 |
2020/07/29(水) 11:38:43.76ID:yJ6wpcWu
自分の理解能力の無さを相手が無能だからと責任転嫁するココナツ
0429デフォルトの名無しさん
垢版 |
2020/07/29(水) 11:39:49.67ID:yJ6wpcWu
>>427
僕は平置きでわかる派ですよ
完全に理解した
0430デフォルトの名無しさん
垢版 |
2020/07/29(水) 11:41:33.11ID:1IRv8wde
で、結局のところ
Javaで「単体で平置きできる関数」って何なの?

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

見苦しいからもうこれ以上レスいらんぞ
0443デフォルトの名無しさん
垢版 |
2020/07/29(水) 18:34:25.78ID:yJ6wpcWu
平置き式のこと?
0445デフォルトの名無しさん
垢版 |
2020/07/29(水) 18:40:24.30ID:yJ6wpcWu
単体で置ける関数のことを単体関数と言い、それを平置きして式化したものが平置き式
ラムダ式なんて西洋かぶれのバズワードを使わなくても説明できるのができるプログラマ
0447デフォルトの名無しさん
垢版 |
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() {
}
0449デフォルトの名無しさん
垢版 |
2020/07/29(水) 20:44:56.64ID:f9ldngpW
フォルダに平積みする事か?
A.class
B.class
C.class
D.class
E.class
0451デフォルトの名無しさん
垢版 |
2020/07/29(水) 23:30:32.60ID:eNj62kDo
ポリモーフィズムって押し付けなんだよね
汎用的な機能を提供する
与える引数だけが戻り値を決めるような
純粋な関数を1つくればDRYになっていいものを、

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

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

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

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

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

you == not Alive

お前はもう死んでいる
0466デフォルトの名無しさん
垢版 |
2020/07/31(金) 07:44:49.12ID:0J+iX777
>>455
プログラムで表現しずらいものをドキュメントで補うんだよ。
SIerに提出するような糞アリバイドキュメントばっかりつくってると理解できないだろうけれど。
0467デフォルトの名無しさん
垢版 |
2020/07/31(金) 09:46:54.45ID:UpUkpE84
プライベートメソッドのドキュメントを作るんだろ?
欠陥品じゃん
0468デフォルトの名無しさん
垢版 |
2020/07/31(金) 12:50:08.54ID:0J+iX777
プライベートだろうとパブリックだろうと、構造がコードでわかりにくけりゃ作るよ。
そういう表面的なことでしか判断できないのは頭が悪い証拠だと思うよ。
0469デフォルトの名無しさん
垢版 |
2020/07/31(金) 13:53:02.12ID:J/Hsbz2N
和田信者は頭が欠陥品
0470デフォルトの名無しさん
垢版 |
2020/07/31(金) 15:26:19.59ID:+g+2reUI
要するに馬鹿にはプログラミングさせるなということだな
馬鹿が書くと変なものをprivateにしてしまって大混乱
プライベートメソッドをテストせざるを得なくなる
0471デフォルトの名無しさん
垢版 |
2020/07/31(金) 20:54:13.68ID:UpUkpE84
普通は表面的=形式的なモンで判断するんでしょこの業界
だって形式しかねーもん
0472デフォルトの名無しさん
垢版 |
2020/08/01(土) 01:42:55.39ID:JfG80/LC
構造図みたいなのはプログラム内には書けないから
それは文章化しておくしかないから仕方がない
0475デフォルトの名無しさん
垢版 |
2020/08/30(日) 15:04:18.01ID:i3Iv6gG3
>>397
>相変わらずオブジェクト指向信じて
>頑張ってるJavaプログラマさん達に
>お伺いしたいんだけどさぁ

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

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

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

違うか?

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

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