■短い回答
プライベートをテストしたい場合は設計に問題があるので、パブリックに変更してテストしましょう
■これに対する(変な人の)驚いた反論
プライベートを一時的にパブリックにして、テストが終わったら
プライベートに戻すなんてやるわけないだろw
↑誰もそんなコトしろなんて言ってない
■テスト専門家による回答
t-wadaのブログ
https://t-wada.hatenablog.jp/entry/should-we-test-private-methods
短くまとめると、プライベートなメソッドのテストを書く必要は 無い と考えています。
ほとんどのプライベートメソッドはパブリックメソッド経由でテストできるからです。
プライベートメソッドは実装の詳細であり、自動テストのターゲットとなる「外部から見た振る舞い」ではありません。
プライベートなメソッドのテストに関しては、4つの考え方があります。
・パブリックメソッド経由でテストする
・別クラスのパブリックメソッドとする
・テスト対象の可視性を(やや)上げる
・プライベートのまま、リフレクションでアクセスしてテストを書く
パブリックメソッド経由でテストする
多くの場合、そのクラスのパブリックメソッド経由でプライベートメソッドのテストも同時に行えます。テストできているか不安があるならテストカバレッジを確認しましょう。
別クラスのパブリックメソッドとする
プライベートなメソッドのテストを書きたいということは、実はテスト対象の責務が多すぎることを示唆している場合があります。
テストがどうしても書きたい場合は、その責務はテスト対象のプライベートな振る舞いではなく、他の誰かのパブリックな振る舞いなのでしょう。
探検
カプセル化■プライベートメソッドをテストする方法
■ このスレッドは過去ログ倉庫に格納されています
2020/07/05(日) 20:47:46.60ID:M+BkbwUs
261デフォルトの名無しさん
2020/07/11(土) 11:26:14.03ID:JFnadz6+ パッケージプライベートだと同じパッケージからならアクセスして良いというメッセージを
開発者に伝えてしまうから望まない依存を生んでしまうリスクはある
どのオブジェクトからも参照されたくない場合もあるからな、やはりprivateをテストできない
言語が遅れてるだけなのだろうね
開発者に伝えてしまうから望まない依存を生んでしまうリスクはある
どのオブジェクトからも参照されたくない場合もあるからな、やはりprivateをテストできない
言語が遅れてるだけなのだろうね
262デフォルトの名無しさん
2020/07/11(土) 11:26:21.59ID:fJlL8BSP263デフォルトの名無しさん
2020/07/11(土) 11:27:14.70ID:JFnadz6+264デフォルトの名無しさん
2020/07/11(土) 11:27:56.48ID:fJlL8BSP >>261
privateをテストできる言語っていうのは
単に全てpublicになっているのと一緒
アンダースコアで、これはアクセスできるけど
privateという意味ですよと言ってるのと何も変わらないよ
privateをテストできる言語っていうのは
単に全てpublicになっているのと一緒
アンダースコアで、これはアクセスできるけど
privateという意味ですよと言ってるのと何も変わらないよ
265デフォルトの名無しさん
2020/07/11(土) 11:28:00.37ID:JFnadz6+ >>262
Javaの話ですよ
Javaの話ですよ
266デフォルトの名無しさん
2020/07/11(土) 11:28:48.86ID:JFnadz6+267デフォルトの名無しさん
2020/07/11(土) 11:29:55.28ID:fJlL8BSP >>263
仕様がはっきりしてるからpublicにするんじゃなくて
仕様をはっきりさせれば、publicにしてもよいと言ってるだけ
理由がなければprivateのままでもいい。どちらでもいい。
テストしたい=理由。理由があるならpublicにしていい。
> なぜならば密結合になってしまうから
テストコードから仕様がはっきりしないprivateをテストすること=密結合
密結合を避けるためにも、公開されたインターフェースにするのが正しい
仕様がはっきりしてるからpublicにするんじゃなくて
仕様をはっきりさせれば、publicにしてもよいと言ってるだけ
理由がなければprivateのままでもいい。どちらでもいい。
テストしたい=理由。理由があるならpublicにしていい。
> なぜならば密結合になってしまうから
テストコードから仕様がはっきりしないprivateをテストすること=密結合
密結合を避けるためにも、公開されたインターフェースにするのが正しい
268デフォルトの名無しさん
2020/07/11(土) 11:30:13.81ID:JFnadz6+ RustやGoはprivateもテストできるよって言ってる人いたから
最近の言語ではprivateもテストできるんだーって思ってたけど
命名規則でアクセス修飾子の代わりを果たしてるんだってことだったの? それは知らなかったなー
最近の言語ではprivateもテストできるんだーって思ってたけど
命名規則でアクセス修飾子の代わりを果たしてるんだってことだったの? それは知らなかったなー
269デフォルトの名無しさん
2020/07/11(土) 11:30:22.00ID:fJlL8BSP270デフォルトの名無しさん
2020/07/11(土) 11:30:59.34ID:fJlL8BSP >>268
ああ、人から聞いただけなのねw
ああ、人から聞いただけなのねw
271デフォルトの名無しさん
2020/07/11(土) 11:31:27.48ID:JFnadz6+273デフォルトの名無しさん
2020/07/11(土) 11:32:06.66ID:fJlL8BSP privateにあくせすできる言語でも
テストするならどちらにしろ仕様をはっきりさせないといけない
そうしないとテストコードがあったからといって
これが正しく仕様を満たしているのか?なんてわからない
テストするならどちらにしろ仕様をはっきりさせないといけない
そうしないとテストコードがあったからといって
これが正しく仕様を満たしているのか?なんてわからない
274デフォルトの名無しさん
2020/07/11(土) 11:35:07.08ID:JFnadz6+ さすがです >>3 の下痢便コード書くだけありますね
何言ってるのかさっぱりわからない
何言ってるのかさっぱりわからない
275デフォルトの名無しさん
2020/07/11(土) 11:36:54.90ID:fJlL8BSP276デフォルトの名無しさん
2020/07/11(土) 11:38:14.80ID:JFnadz6+ >>275
そうすると君はMainを勘違いしてた人か、僕と仲直りしますか?
そうすると君はMainを勘違いしてた人か、僕と仲直りしますか?
277デフォルトの名無しさん
2020/07/11(土) 11:39:33.67ID:JFnadz6+ 同じ人が同じこと言ってるだけのスレ
でもそんなスレも良いですよね
でもそんなスレも良いですよね
278デフォルトの名無しさん
2020/07/11(土) 11:47:13.10ID:JFnadz6+ たとえばこの先Javaが進化したとしてテストオブジェクトのみを特別視して
テストオブジェクトからのみprivateにアクセスできるようになったとすると
テストオブジェクトをオブジェクト指向の枠組みで捉えるならば
オブジェクト指向としては破綻してる
Javaは受け入れないだろうね、Microsoftがdelegateを提案したときも
interfaceという仕組みがあるんだからdelegateは邪道だと言って蹴ったからなあ
実益に叶うという理由で根本的なところまで作り変えることができるのは
Microsoftだろうなあ、Javaの前にC#が対応しそうな予感はある
テストオブジェクトからのみprivateにアクセスできるようになったとすると
テストオブジェクトをオブジェクト指向の枠組みで捉えるならば
オブジェクト指向としては破綻してる
Javaは受け入れないだろうね、Microsoftがdelegateを提案したときも
interfaceという仕組みがあるんだからdelegateは邪道だと言って蹴ったからなあ
実益に叶うという理由で根本的なところまで作り変えることができるのは
Microsoftだろうなあ、Javaの前にC#が対応しそうな予感はある
279デフォルトの名無しさん
2020/07/11(土) 11:52:27.04ID:JFnadz6+ いまの言語仕様での最適解は >>5 ですね
これ書いた人は天才だと思いますよ
何気ないことだけれどもコードの隅々にまで神経が行き届いていて
美しく整備されて堅牢なコードです、オブジェクト指向の限界を示したと言って良いですね
これ書いた人は天才だと思いますよ
何気ないことだけれどもコードの隅々にまで神経が行き届いていて
美しく整備されて堅牢なコードです、オブジェクト指向の限界を示したと言って良いですね
280デフォルトの名無しさん
2020/07/11(土) 11:55:21.12ID:0/l6dmQ+ >>248
逆転の発想じゃなくて都合のいいことを信じたい馬鹿の発想だろ
逆転の発想じゃなくて都合のいいことを信じたい馬鹿の発想だろ
281デフォルトの名無しさん
2020/07/11(土) 12:00:30.64ID:Cl4N6Aux テストコードは設計の外にあるものだからクラスの可視性とか直接関係ないだろ。
ふつう、設計書のクラス図にテストクラスを書いたりはしない。
ふつう、設計書のクラス図にテストクラスを書いたりはしない。
282デフォルトの名無しさん
2020/07/11(土) 12:02:06.50ID:wIsoNFzM 書いてもいいかなとは思う
283デフォルトの名無しさん
2020/07/11(土) 12:06:30.88ID:JFnadz6+ >>281
そうなんだよねー
そうなんだよねー
284デフォルトの名無しさん
2020/07/11(土) 12:09:38.93ID:fJlL8BSP >>281
クラス図にprivateメソッドを書きますか?
クラス図にprivateメソッドを書きますか?
285デフォルトの名無しさん
2020/07/11(土) 12:11:12.25ID:JFnadz6+ クラス内を調査してprivateメソッドを列挙して
同クラス内のprivateメソッドをテストするコードを列挙して
カバレッジを計測するツールがあればみんな幸せになれそうですね
カバレッジ計測ツールがprivateメソッドには今の時点で対応してないって
だけでprivateメソッドのテスト自体は >>5 のように書けますから
ツールの開発が遅れてるだけなのかも知れませんね
同クラス内のprivateメソッドをテストするコードを列挙して
カバレッジを計測するツールがあればみんな幸せになれそうですね
カバレッジ計測ツールがprivateメソッドには今の時点で対応してないって
だけでprivateメソッドのテスト自体は >>5 のように書けますから
ツールの開発が遅れてるだけなのかも知れませんね
286デフォルトの名無しさん
2020/07/11(土) 12:12:35.29ID:fJlL8BSP >>285
もしかしてお前カバレッジの意味がわかってないんじゃね?
publicメソッドの中からprivateメソッドが呼び出された時
privateメソッドの行は実行された=カバレッジとして計測される
ってことは知ってますよね?
もしかしてお前カバレッジの意味がわかってないんじゃね?
publicメソッドの中からprivateメソッドが呼び出された時
privateメソッドの行は実行された=カバレッジとして計測される
ってことは知ってますよね?
287デフォルトの名無しさん
2020/07/11(土) 12:15:06.18ID:fJlL8BSP288デフォルトの名無しさん
2020/07/11(土) 12:15:29.92ID:JFnadz6+289デフォルトの名無しさん
2020/07/11(土) 12:16:06.22ID:fJlL8BSP290デフォルトの名無しさん
2020/07/11(土) 12:17:45.08ID:JFnadz6+291デフォルトの名無しさん
2020/07/11(土) 12:18:51.24ID:fJlL8BSP292デフォルトの名無しさん
2020/07/11(土) 12:19:25.54ID:Cl4N6Aux >>284
開発の段階によって違うんじゃね?最終的な設計ドキュメントには書いてるかな。
開発の段階によって違うんじゃね?最終的な設計ドキュメントには書いてるかな。
293デフォルトの名無しさん
2020/07/11(土) 12:19:47.24ID:JFnadz6+ >>291
問題はそこじゃないです、君は僕と仲直りますかということが問題です
問題はそこじゃないです、君は僕と仲直りますかということが問題です
294デフォルトの名無しさん
2020/07/11(土) 12:22:20.99ID:JFnadz6+ 僕はいままで手作業による結合テストだけで生き抜いてきた生粋のブラックボックスマンです
なぜそれが可能だったかというと簡単なプログラムしか書いたことがなかったからです
しかし、最近複雑なプログラムを書く機会があり結合テストだけでは不十分であることを実感しました
以上、僕の近況報告です
なぜそれが可能だったかというと簡単なプログラムしか書いたことがなかったからです
しかし、最近複雑なプログラムを書く機会があり結合テストだけでは不十分であることを実感しました
以上、僕の近況報告です
295デフォルトの名無しさん
2020/07/11(土) 12:23:49.29ID:JFnadz6+ 僕は単体テスト書いたことありますよ >>5 で書きました
カバレッジは計測したことないですけどそれは重要ではありません
カバレッジは計測したことないですけどそれは重要ではありません
296デフォルトの名無しさん
2020/07/11(土) 12:27:04.12ID:fJlL8BSP >>293
しません
しません
297デフォルトの名無しさん
2020/07/11(土) 12:27:47.72ID:fJlL8BSP298デフォルトの名無しさん
2020/07/11(土) 12:28:33.49ID:fJlL8BSP > 最終的な設計ドキュメントはコードから生成するものだからね
クラス図の話ね。クラス図は(唯一?)コードから生成できる。
クラス図の話ね。クラス図は(唯一?)コードから生成できる。
299デフォルトの名無しさん
2020/07/11(土) 12:29:05.33ID:JFnadz6+ >>296
(´・ω・`)
(´・ω・`)
300デフォルトの名無しさん
2020/07/11(土) 12:31:00.81ID:fJlL8BSP 正直、詳細なクラス図は、設計図の中で一番不要だと思ってる。
必要なのはソースコードと完全に一致してるクラス図ではなく
クラス概要図・関連図とでも言うべきだろう
主要なメソッドとそれぞれのクラス関係がわかればいい
目的はなにかを考えればその結論にたどり着くはず
必要なのはソースコードと完全に一致してるクラス図ではなく
クラス概要図・関連図とでも言うべきだろう
主要なメソッドとそれぞれのクラス関係がわかればいい
目的はなにかを考えればその結論にたどり着くはず
301デフォルトの名無しさん
2020/07/11(土) 12:37:31.52ID:Cl4N6Aux >>297
保守する人にとってはあった方がいいと思ってる。
保守する人にとってはあった方がいいと思ってる。
302デフォルトの名無しさん
2020/07/11(土) 12:45:10.61ID:JFnadz6+ 単体テストという言葉の曖昧さがpublic派か、private派かの分裂の原因です
publicメソッドはオブジェクトのインターフェイスなので
publicメソッドをテストすることをインターフェイステストというべきです
オブジェクト指向で、インターフェイスが関わるのはオブジェクトのコラボレーションが行われるときです
一方でprivateメソッドはpublicメソッドが作られるのと同じか、もしくはそれ以前に作られます
publicメソッドが正しく動作することの前提としてprivateメソッドが正しく動作することがあるので
privateメソッドをテストすることをインプリメンテーションテストという言うべきです
privateメソッドを使用するのは同じオブジェクト内のメソッドなので、オブジェクトのコラボレーションとは直接の関係がありません
単体テストと言っても対象のメソッドによって、テストが必要な時期が異なるわけです
privateのテストはクラスが作られる前に行われますし、publicのテストがクラスは作られた後に行われます
あとはコストの話です、結合テストがすべて通るなら単体テストは必要ありませんし本番稼働がすべてうまくいくならテスト自体必要ありません
後の工程で発覚するほど手戻りが大きくなりコストが膨らむので段階を追ってテストしていきましょうというのが基本的な考え方です
privateのテストをすることによってpublicのテストの手戻りが少なくなることはあるんです
privateのテストはやったほうが良いです。
publicメソッドはオブジェクトのインターフェイスなので
publicメソッドをテストすることをインターフェイステストというべきです
オブジェクト指向で、インターフェイスが関わるのはオブジェクトのコラボレーションが行われるときです
一方でprivateメソッドはpublicメソッドが作られるのと同じか、もしくはそれ以前に作られます
publicメソッドが正しく動作することの前提としてprivateメソッドが正しく動作することがあるので
privateメソッドをテストすることをインプリメンテーションテストという言うべきです
privateメソッドを使用するのは同じオブジェクト内のメソッドなので、オブジェクトのコラボレーションとは直接の関係がありません
単体テストと言っても対象のメソッドによって、テストが必要な時期が異なるわけです
privateのテストはクラスが作られる前に行われますし、publicのテストがクラスは作られた後に行われます
あとはコストの話です、結合テストがすべて通るなら単体テストは必要ありませんし本番稼働がすべてうまくいくならテスト自体必要ありません
後の工程で発覚するほど手戻りが大きくなりコストが膨らむので段階を追ってテストしていきましょうというのが基本的な考え方です
privateのテストをすることによってpublicのテストの手戻りが少なくなることはあるんです
privateのテストはやったほうが良いです。
303デフォルトの名無しさん
2020/07/11(土) 12:45:36.89ID:fJlL8BSP >>301
保守する時はコードから生成できるので完璧なのはいらない
だから本当に必要なのはクラス概要図だろう
図としてみたい場合、メソッドすべてがずらずら書かれていても邪魔なだけ
ましてやprivateなんていらない。
図としてみたい場合、本当に見たいのは関連だろう?
保守する時はコードから生成できるので完璧なのはいらない
だから本当に必要なのはクラス概要図だろう
図としてみたい場合、メソッドすべてがずらずら書かれていても邪魔なだけ
ましてやprivateなんていらない。
図としてみたい場合、本当に見たいのは関連だろう?
304デフォルトの名無しさん
2020/07/11(土) 12:46:11.05ID:fJlL8BSP305デフォルトの名無しさん
2020/07/11(土) 12:46:51.38ID:JFnadz6+ 頑張って書いた、これはもう論文と言って良いのでは
僕はプログラミングのテストについて博士号もらっても良いのでは
少なくともこのスレではテストに一番詳しい
僕はプログラミングのテストについて博士号もらっても良いのでは
少なくともこのスレではテストに一番詳しい
306デフォルトの名無しさん
2020/07/11(土) 12:48:09.47ID:JFnadz6+307デフォルトの名無しさん
2020/07/11(土) 12:48:53.15ID:JFnadz6+ 僕はツールを使ったことはないけど、頭を使うからね
308デフォルトの名無しさん
2020/07/11(土) 12:50:19.54ID:fJlL8BSP 288 返信:デフォルトの名無しさん[] 投稿日:2020/07/11(土) 12:15:29.92 ID:JFnadz6+ [26/35]
>>286
僕は単体テストやったこと無い
カバレッジの計測もしたことないからわからない
僕は知りません
>>286
僕は単体テストやったこと無い
カバレッジの計測もしたことないからわからない
僕は知りません
310デフォルトの名無しさん
2020/07/11(土) 12:53:21.76ID:JFnadz6+ 君はレトリックな部分に引きづられる傾向があるから
もう少し客観的に遠目でものを見るようにしたが良いかも
もう少し客観的に遠目でものを見るようにしたが良いかも
311デフォルトの名無しさん
2020/07/11(土) 13:02:59.95ID:JFnadz6+ 僕はJavaしか知らないと言ったけどC#に関するあっと言わせるような知識と考察を垣間見せたでしょ
僕の知性あふれる想像力は君の経験を凌駕する
ツールに習熟して使いこなすのも大事だけど、頭を使って状況を分析して打開する力も大事
僕は後者の方が優れている、君と僕が手を組めば最強になれる
僕と仲直りしてくれますか?
僕の知性あふれる想像力は君の経験を凌駕する
ツールに習熟して使いこなすのも大事だけど、頭を使って状況を分析して打開する力も大事
僕は後者の方が優れている、君と僕が手を組めば最強になれる
僕と仲直りしてくれますか?
312デフォルトの名無しさん
2020/07/11(土) 14:58:15.05ID:0BF0aQZE TDD信奉者がprivateメソッドのテストは必要ないと主張するのは当たり前
TDDは一般的にpublicメソッドを最小”ユニット”として書き始めるから
privateメソッドが作られるのはテストが通る状態を維持したままリファクタリングして
一部をprivateメソッドに抽出した場合だけ
だからprivateメソッドのテストを書く必要がない
privateメソッドじゃなくHelperクラスのpublicメソッド等に抽出した場合も同じ
HelperクラスをpublicなAPIとして公開するのでなければ別途テストを追加する必要は基本的にない
TDDは一般的にpublicメソッドを最小”ユニット”として書き始めるから
privateメソッドが作られるのはテストが通る状態を維持したままリファクタリングして
一部をprivateメソッドに抽出した場合だけ
だからprivateメソッドのテストを書く必要がない
privateメソッドじゃなくHelperクラスのpublicメソッド等に抽出した場合も同じ
HelperクラスをpublicなAPIとして公開するのでなければ別途テストを追加する必要は基本的にない
313デフォルトの名無しさん
2020/07/11(土) 15:11:26.01ID:KCR4lRFo 和田メソッドよろしく!
314デフォルトの名無しさん
2020/07/11(土) 15:36:11.13ID:JFnadz6+ >>312
なるほどね
なるほどね
315デフォルトの名無しさん
2020/07/11(土) 15:55:06.50ID:fJlL8BSP 和田さんの話にも飽きたので、レガシーコード改善ガイドという本の話でもしようか?
https://bmf-tech.com/posts/%E3%83%AC%E3%82%AC%E3%82%B7%E3%83%BC%E3%82%B3%E3%83%BC%E3%83%89%E6%94%B9%E5%96%84%E3%82%AC%E3%82%A4%E3%83%89
・クラスのメソッドがprivateだったとき
・publicメソッドを通じたテストが可能か検討する
・publicメソッドを通じたテストを行うことで実際のコードと同じ方法によるテストが保証できる
・上記が可能でない場合
・そのprivateメソッドはpublicにすべき
・大抵の場合はそのクラスが多くのことをやりすぎている、再設計が必要であることを意味している
・privateメソッドをpublicメソッドにすることについて悩む点
・メソッドが単なるユーティリティで、呼び出し側が気にかけるものでない
→そのメソッドを別クラスに移せないか検討する
→クラスのインターフェースに余分なpublicメソッドがあることは許容可能
・呼び出し側がそのメソッドを直接使った場合、そのクラスの他のメソッドの結果に悪影響を及ぼす可能性がある
→そのメソッドを別クラスに移し、移動先のクラスでpublicにする
・良い設計とはテストが可能であり、悪い設計はテストが不可能
まあ言ってることはほとんど同じなんだけどなw
https://bmf-tech.com/posts/%E3%83%AC%E3%82%AC%E3%82%B7%E3%83%BC%E3%82%B3%E3%83%BC%E3%83%89%E6%94%B9%E5%96%84%E3%82%AC%E3%82%A4%E3%83%89
・クラスのメソッドがprivateだったとき
・publicメソッドを通じたテストが可能か検討する
・publicメソッドを通じたテストを行うことで実際のコードと同じ方法によるテストが保証できる
・上記が可能でない場合
・そのprivateメソッドはpublicにすべき
・大抵の場合はそのクラスが多くのことをやりすぎている、再設計が必要であることを意味している
・privateメソッドをpublicメソッドにすることについて悩む点
・メソッドが単なるユーティリティで、呼び出し側が気にかけるものでない
→そのメソッドを別クラスに移せないか検討する
→クラスのインターフェースに余分なpublicメソッドがあることは許容可能
・呼び出し側がそのメソッドを直接使った場合、そのクラスの他のメソッドの結果に悪影響を及ぼす可能性がある
→そのメソッドを別クラスに移し、移動先のクラスでpublicにする
・良い設計とはテストが可能であり、悪い設計はテストが不可能
まあ言ってることはほとんど同じなんだけどなw
316デフォルトの名無しさん
2020/07/11(土) 15:56:52.92ID:fJlL8BSP https://maku.blog/p/p6awy3z/#%E7%AC%AC10%E7%AB%A0-%E3%81%93%E3%81%AE%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%E3%82%92%E3%83%86%E3%82%B9%E3%83%88%E3%83%8F%E3%83%BC%E3%83%8D%E3%82%B9%E3%81%A7%E5%8B%95%E3%81%8B%E3%81%99%E3%81%93%E3%81%A8%E3%81%8C%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%9B%E3%82%93
第10章 このメソッドをテストハーネスで動かすことができません
テストしたいメソッドが private である
・private メソッドをテストしたい場合、そのメソッドは public にすべきである。
・public メソッドにすべきかどうかで悩んでしまう場合、大抵は、そのクラスが多くのことを行いすぎであり、
修正すべきことを意味している(1つのクラスが複数の責務を持ってしまっている)。
・よい設計はテスト可能であり、テスト可能でない設計は悪い設計である。
・この方法は、メソッドを単純に public 化するのと本質的には変わらないので微妙な対応方法だが、リファクタリングすべき箇所の目印となる。
・Java などの言語ではリフレクションによって private メソッドのテストを記述することはできるが、
根本的な依存関係の問題を先延ばしにしているだけである。その種のごまかしをすると、
コードがどの程度悪くなっているのかに気付きにくくなってしまう。
第10章 このメソッドをテストハーネスで動かすことができません
テストしたいメソッドが private である
・private メソッドをテストしたい場合、そのメソッドは public にすべきである。
・public メソッドにすべきかどうかで悩んでしまう場合、大抵は、そのクラスが多くのことを行いすぎであり、
修正すべきことを意味している(1つのクラスが複数の責務を持ってしまっている)。
・よい設計はテスト可能であり、テスト可能でない設計は悪い設計である。
・この方法は、メソッドを単純に public 化するのと本質的には変わらないので微妙な対応方法だが、リファクタリングすべき箇所の目印となる。
・Java などの言語ではリフレクションによって private メソッドのテストを記述することはできるが、
根本的な依存関係の問題を先延ばしにしているだけである。その種のごまかしをすると、
コードがどの程度悪くなっているのかに気付きにくくなってしまう。
317デフォルトの名無しさん
2020/07/11(土) 17:36:03.50ID:KCR4lRFo 北朝鮮行ったことあるか?
日本の町並みには看板があるだろ?
「パナソニック」とか「コカ・コーラ」とかだよな。
北朝鮮でこれに該当するのはスローガンの看板だから。
社名や商品名の看板は一切ない。
「ウリナラをキノコの国にしよう!」←裏の意味は無くそのままの意味らしい。
「苦難の行軍!」
「白頭の革命精神!」
和田メソッドに通じるものがあるよな。
日本の町並みには看板があるだろ?
「パナソニック」とか「コカ・コーラ」とかだよな。
北朝鮮でこれに該当するのはスローガンの看板だから。
社名や商品名の看板は一切ない。
「ウリナラをキノコの国にしよう!」←裏の意味は無くそのままの意味らしい。
「苦難の行軍!」
「白頭の革命精神!」
和田メソッドに通じるものがあるよな。
318デフォルトの名無しさん
2020/07/11(土) 18:36:13.70ID:fJlL8BSP >>317
他のスレで書いたけど「例え」は物事をわかりやすく説明するために使うもの
何かを批判するために「例え」を使うのは悪手。なぜなら
「例え」で批判してるのは「例え」に使ったものだから
お前が批判してるのは北朝鮮であって
和田さんや「レガシーコード改善ガイド」の
ベストプラクティスの批判にはなっていない
他のスレで書いたけど「例え」は物事をわかりやすく説明するために使うもの
何かを批判するために「例え」を使うのは悪手。なぜなら
「例え」で批判してるのは「例え」に使ったものだから
お前が批判してるのは北朝鮮であって
和田さんや「レガシーコード改善ガイド」の
ベストプラクティスの批判にはなっていない
319デフォルトの名無しさん
2020/07/11(土) 18:45:30.42ID:KCR4lRFo 和田メソッドは時代遅れの遺物。
320デフォルトの名無しさん
2020/07/11(土) 18:47:40.49ID:KCR4lRFo t-wada氏がお勧めする和田メソッド。
321デフォルトの名無しさん
2020/07/11(土) 19:20:51.26ID:JFnadz6+ 話をしようかと言い、本の内容をコピペしただけとかゲンナリするよね
たとえ批判されても自分が言ったわけじゃないから問題ないわけですね
スネ夫メソッドと名付けましょう
たとえ批判されても自分が言ったわけじゃないから問題ないわけですね
スネ夫メソッドと名付けましょう
322デフォルトの名無しさん
2020/07/11(土) 19:23:09.88ID:JFnadz6+ 本に書いてあることを自分なりに実践してみた結果大失敗して
和田メソッドは役に立たなかったとかそういう話が聞きたい
和田メソッドは役に立たなかったとかそういう話が聞きたい
323デフォルトの名無しさん
2020/07/11(土) 19:30:25.84ID:fJlL8BSP 実践した結果コードがきれいになり
テストがしやすくなったよ
テストがしやすくなったよ
324デフォルトの名無しさん
2020/07/11(土) 19:35:57.71ID:JFnadz6+ >>323
さようか
さようか
325デフォルトの名無しさん
2020/07/11(土) 19:37:32.93ID:JFnadz6+ 車の運転がうまい人は車の危険性を知ってる人
和田メソッドを熟知した人なら和田メソッドの危険性を知ってると思うのだよ
和田メソッドの限界はどこにあるのだろうね
TDDが向かないプログラムもあるとは本に書いてあるけど
それが具体的にどういう状況か、どういうプログラムかは示されないからよくわからない
僕はTDDの限界はpublicを前提とするところにあるのじゃないかと漠然と思ってる
まだぼんやりとして言語化できる段階にない
和田メソッドを熟知した人なら和田メソッドの危険性を知ってると思うのだよ
和田メソッドの限界はどこにあるのだろうね
TDDが向かないプログラムもあるとは本に書いてあるけど
それが具体的にどういう状況か、どういうプログラムかは示されないからよくわからない
僕はTDDの限界はpublicを前提とするところにあるのじゃないかと漠然と思ってる
まだぼんやりとして言語化できる段階にない
326デフォルトの名無しさん
2020/07/11(土) 20:23:20.20ID:JFnadz6+ ググってみたけどTDDに否定的な考え方は世界的にあるみたいね
327デフォルトの名無しさん
2020/07/11(土) 20:58:34.53ID:KCR4lRFo TDDはともかく、和田メソッドはダメでしょう。
328デフォルトの名無しさん
2020/07/11(土) 21:57:47.69ID:fJlL8BSP まるで○○は危険でしょうと言うだけで
何が危険かわかってない人のような言い方だなw
何が危険かわかってない人のような言い方だなw
329デフォルトの名無しさん
2020/07/11(土) 21:59:07.66ID:fJlL8BSP330デフォルトの名無しさん
2020/07/11(土) 22:03:47.24ID:fJlL8BSP >>327
ではTDDの場合どうなのか?
Private Methods, Test Driven Development, and Good Design
https://www.infoq.com/news/2008/01/private-methods-tdd-design/
> Why to test private method? Most of TDDers would answer instantly: don’t do it.
プライベートのテストをする理由?
ほとんどのTDDersはこう答える。「するな」
和田メソッド(笑)が言っていることとTDDは完全に一致してるな
まあ実際にはTDDが最初にあって和田さんは
それに同意して、TDDの話をしてるんだから当然なんだが
ではTDDの場合どうなのか?
Private Methods, Test Driven Development, and Good Design
https://www.infoq.com/news/2008/01/private-methods-tdd-design/
> Why to test private method? Most of TDDers would answer instantly: don’t do it.
プライベートのテストをする理由?
ほとんどのTDDersはこう答える。「するな」
和田メソッド(笑)が言っていることとTDDは完全に一致してるな
まあ実際にはTDDが最初にあって和田さんは
それに同意して、TDDの話をしてるんだから当然なんだが
331デフォルトの名無しさん
2020/07/11(土) 22:04:46.73ID:fJlL8BSP How to unit test private methods in BDD / TDD?
https://stackoverflow.com/questions/1583363/how-to-unit-test-private-methods-in-bdd-tdd
https://stackoverflow.com/questions/1583363/how-to-unit-test-private-methods-in-bdd-tdd
332デフォルトの名無しさん
2020/07/11(土) 22:05:21.04ID:fJlL8BSP Don’t Test Private Methods
https://dzone.com/articles/dont-test-private-methods
https://dzone.com/articles/dont-test-private-methods
333デフォルトの名無しさん
2020/07/11(土) 22:28:49.46ID:JFnadz6+334デフォルトの名無しさん
2020/07/11(土) 22:31:24.19ID:JFnadz6+ > 実践した結果コードがきれいになり
> テストがしやすくなったよ
君の感想はこれだけ
あとは引用コピペを繰り返してるだけ
君の経験は浅すぎて僕の参考にならない
> テストがしやすくなったよ
君の感想はこれだけ
あとは引用コピペを繰り返してるだけ
君の経験は浅すぎて僕の参考にならない
335デフォルトの名無しさん
2020/07/11(土) 22:32:08.86ID:JFnadz6+ スネ夫の限界
僕は出来杉君
僕は出来杉君
336デフォルトの名無しさん
2020/07/11(土) 22:33:23.97ID:fJlL8BSP337デフォルトの名無しさん
2020/07/11(土) 22:37:09.78ID:JFnadz6+338デフォルトの名無しさん
2020/07/11(土) 22:39:35.32ID:wIsoNFzM もう人のフンドシで相撲をとるのはやめろ
339デフォルトの名無しさん
2020/07/11(土) 22:40:20.87ID:fJlL8BSP340デフォルトの名無しさん
2020/07/11(土) 22:42:56.22ID:JFnadz6+ 世の中に銀の弾丸は無いからね
何事にも限界はあるでしょ、一般論だよ
IQ低い人はすぐ被害妄想いだくから面倒
何事にも限界はあるでしょ、一般論だよ
IQ低い人はすぐ被害妄想いだくから面倒
341デフォルトの名無しさん
2020/07/11(土) 22:43:21.62ID:JFnadz6+ もっと知性あふれる人と知的な会話をしたいなー
342デフォルトの名無しさん
2020/07/11(土) 22:44:09.34ID:fJlL8BSP >>340
一般論だからこそ、TDDの批判にはならないんだよ。
一般論だからこそ、TDDの批判にはならないんだよ。
343デフォルトの名無しさん
2020/07/11(土) 22:45:11.39ID:fJlL8BSP つまり
「お前の意見に言いたいことがある。一般論として人はだれでも間違える(ドヤァ)」
といっても意見にたいして、何かを言ってることにはならないのと同じね。
「お前の意見に言いたいことがある。一般論として人はだれでも間違える(ドヤァ)」
といっても意見にたいして、何かを言ってることにはならないのと同じね。
344デフォルトの名無しさん
2020/07/11(土) 22:45:14.99ID:JFnadz6+ ちなみに僕は常識に価値があるとも思ってない
京都大学では真実は少数派に宿るっていう言葉が使われてるよ
京都大学では真実は少数派に宿るっていう言葉が使われてるよ
345デフォルトの名無しさん
2020/07/11(土) 22:46:07.36ID:JFnadz6+ >>342
疑いをかけられたんだームキーって反応してる君がおかしいってこと
疑いをかけられたんだームキーって反応してる君がおかしいってこと
346デフォルトの名無しさん
2020/07/11(土) 22:46:25.25ID:fJlL8BSP >>344
じゃあ京都大学ではその言葉は多数派だから真実にはならないね(笑)
じゃあ京都大学ではその言葉は多数派だから真実にはならないね(笑)
347デフォルトの名無しさん
2020/07/11(土) 22:46:56.12ID:fJlL8BSP348デフォルトの名無しさん
2020/07/11(土) 22:50:38.71ID:JFnadz6+349デフォルトの名無しさん
2020/07/11(土) 22:51:31.82ID:fJlL8BSP350デフォルトの名無しさん
2020/07/11(土) 22:52:25.23ID:JFnadz6+ > >>337
> まるで和田メソッド(TDDの常識的な手法)に
> 限界があるような言い方してるじゃんw
>
> 自分が何も知らないのに、限界があるんじゃないかという
> 疑いをかけるのはだめ。
疑いをかけられてないと思ってる人間が疑いをかけるのはだめとは言わんでしょう
> まるで和田メソッド(TDDの常識的な手法)に
> 限界があるような言い方してるじゃんw
>
> 自分が何も知らないのに、限界があるんじゃないかという
> 疑いをかけるのはだめ。
疑いをかけられてないと思ってる人間が疑いをかけるのはだめとは言わんでしょう
351デフォルトの名無しさん
2020/07/11(土) 22:53:46.53ID:fJlL8BSP >>350
日本語が理解できてないねw
日本語が理解できてないねw
352デフォルトの名無しさん
2020/07/11(土) 22:56:57.75ID:JFnadz6+ 君は疑いをかけられてると思っていた
僕は一般論だよと言った
君は疑いをかけられてないと言い出した
僕はそんなの当たり前だろということを示すために君は日本語を使ってると
当たり前のことを言って皮肉った
という流れだったんだ
僕は一般論だよと言った
君は疑いをかけられてないと言い出した
僕はそんなの当たり前だろということを示すために君は日本語を使ってると
当たり前のことを言って皮肉った
という流れだったんだ
353デフォルトの名無しさん
2020/07/11(土) 23:20:35.55ID:JFnadz6+ もうお互い大変でしょう、僕と仲直りしましょうか?
君にアホと言ったのは謝るよ、君が僕にバカと言ったのは忘れるよ
僕は心の広い知的なイケメンです
君にアホと言ったのは謝るよ、君が僕にバカと言ったのは忘れるよ
僕は心の広い知的なイケメンです
354デフォルトの名無しさん
2020/07/12(日) 08:15:23.41ID:/RSb8Vzv 和田メソッドの真骨頂は、バグを作り込まなければテストする必要が無いことにある。
テストは甘え、甘えがある限りバグは無くならない。
つまり、テストしない仕組みづくりこそが和田メソッドである。
テストは甘え、甘えがある限りバグは無くならない。
つまり、テストしない仕組みづくりこそが和田メソッドである。
355デフォルトの名無しさん
2020/07/12(日) 09:15:09.92ID:SoQxatgN クソみたいな議論ばっかに見えるがプログラム技術板の中ではわりかしまともな方になってるぞ。
356デフォルトの名無しさん
2020/07/12(日) 09:33:56.05ID:zf8GLb7g >>355
参考までにまともだと思うレス番教えてくれ
参考までにまともだと思うレス番教えてくれ
357デフォルトの名無しさん
2020/07/12(日) 12:19:27.16ID:6LAoyHzZ >>354
デマ禁止な
デマ禁止な
358デフォルトの名無しさん
2020/07/12(日) 15:39:00.55ID:/RSb8Vzv 和田メソッド被害者の会結成しなくては。
359デフォルトの名無しさん
2020/07/12(日) 16:03:31.03ID:lQJaWZP0 本当の被害者は自分が被害を受けたと自覚していない
360デフォルトの名無しさん
2020/07/12(日) 16:04:35.47ID:/RSb8Vzv それは恐ろしい話だけど、このスレにもちらほらいるね。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 中国国営メディア「沖縄は日本ではない」… ★2 [BFU★]
- 中国国営メディア「沖縄は日本ではない」… ★3 [BFU★]
- 高市政権にパイプ役不在…日中高まる緊張 公明党の連立離脱影響、自民内にも懸念「自分でまいた種は自分で刈り取ってもらわないと」 [ぐれ★]
- 小野田氏、”中国経済への依存“に警戒感 高市首相の国会答弁巡り [煮卵★]
- 【こんなの初めて…】民泊には既にキャンセルも 中国の渡航自粛で [ぐれ★]
- 【サッカー】独占入手 最年長JリーガーにW不倫疑惑 『お風呂覗きたいんですが笑』LINE流出も… 慰謝料トラブルを本人に直撃 [冬月記者★]
- 三嶋由紀夫ってネトウヨだったの? [633473628]
- 【画像】セクシー女優・天沢りんさん「お休み頂いてた半年間でこんな体になりました🪽🤍」👉予想通りの展開に [242521385]
- 中国国営放送「日本は琉球をただちに中国に返還せよ」 キタ━━━━(゚∀゚)━━━━!!!!! [314039747]
- SNSで米が高いと投稿すると高市ソルジャーに攻撃される模様 [931948549]
- 【高市悲報】アメリカ戦争省「あのさ、何回シミュレートしてもわーくに中国に負けちゃうんだよね🤗」 [359965264]
- 自民「高市の一言でこれまで積み上げてきた関係が駄目になる。言葉の重みを分かっていない。自分でまいた種は自分で刈り取ってもらう」 [256556981]
