■短い回答
プライベートをテストしたい場合は設計に問題があるので、パブリックに変更してテストしましょう
■これに対する(変な人の)驚いた反論
プライベートを一時的にパブリックにして、テストが終わったら
プライベートに戻すなんてやるわけないだろw
↑誰もそんなコトしろなんて言ってない
■テスト専門家による回答
t-wadaのブログ
https://t-wada.hatenablog.jp/entry/should-we-test-private-methods
短くまとめると、プライベートなメソッドのテストを書く必要は 無い と考えています。
ほとんどのプライベートメソッドはパブリックメソッド経由でテストできるからです。
プライベートメソッドは実装の詳細であり、自動テストのターゲットとなる「外部から見た振る舞い」ではありません。
プライベートなメソッドのテストに関しては、4つの考え方があります。
・パブリックメソッド経由でテストする
・別クラスのパブリックメソッドとする
・テスト対象の可視性を(やや)上げる
・プライベートのまま、リフレクションでアクセスしてテストを書く
パブリックメソッド経由でテストする
多くの場合、そのクラスのパブリックメソッド経由でプライベートメソッドのテストも同時に行えます。テストできているか不安があるならテストカバレッジを確認しましょう。
別クラスのパブリックメソッドとする
プライベートなメソッドのテストを書きたいということは、実はテスト対象の責務が多すぎることを示唆している場合があります。
テストがどうしても書きたい場合は、その責務はテスト対象のプライベートな振る舞いではなく、他の誰かのパブリックな振る舞いなのでしょう。
探検
カプセル化■プライベートメソッドをテストする方法
■ このスレッドは過去ログ倉庫に格納されています
2020/07/05(日) 20:47:46.60ID:M+BkbwUs
249デフォルトの名無しさん
2020/07/11(土) 10:26:24.09ID:KzXDm3Nb じゃあ編み出してどうぞ
250デフォルトの名無しさん
2020/07/11(土) 10:36:26.55ID:fJlL8BSP251デフォルトの名無しさん
2020/07/11(土) 10:53:54.57ID:Cl4N6Aux だって可視性とテストするしないの関係は自明じゃないじゃん。
それが関係あるなら外部にexportする関数以外はテストしなくていいことになるんじゃね?
それが関係あるなら外部にexportする関数以外はテストしなくていいことになるんじゃね?
252デフォルトの名無しさん
2020/07/11(土) 11:13:39.51ID:JFnadz6+253デフォルトの名無しさん
2020/07/11(土) 11:16:43.36ID:JFnadz6+ publicにしたら全然関係ないパッケージからもアクセスされてしまうからね
不必要な依存を発生させることになってしまう、密結合が促進されるね
そういう意識のない人間が >>3 のような下痢便コードを書いてしまうんだね
不必要な依存を発生させることになってしまう、密結合が促進されるね
そういう意識のない人間が >>3 のような下痢便コードを書いてしまうんだね
254デフォルトの名無しさん
2020/07/11(土) 11:18:39.33ID:fJlL8BSP255デフォルトの名無しさん
2020/07/11(土) 11:19:08.47ID:fJlL8BSP256デフォルトの名無しさん
2020/07/11(土) 11:20:35.92ID:JFnadz6+ >>254
言ってるじゃん、アクセス修飾子とメソッドの仕様が明確になってるかは無関係
言ってるじゃん、アクセス修飾子とメソッドの仕様が明確になってるかは無関係
257デフォルトの名無しさん
2020/07/11(土) 11:21:19.03ID:JFnadz6+258デフォルトの名無しさん
2020/07/11(土) 11:22:19.30ID:JFnadz6+ テストから呼び出せるのが問題なんじゃなくて
関係ないパッケージから呼び出されて密結合になるのが問題だと言ってる
関係ないパッケージから呼び出されて密結合になるのが問題だと言ってる
259デフォルトの名無しさん
2020/07/11(土) 11:22:42.09ID:JFnadz6+ だからパッケージプライベートなら良いだろうと言ってるわけ
260デフォルトの名無しさん
2020/07/11(土) 11:25:32.87ID:fJlL8BSP >>256
言ってないよ?
外部からアクセスしないならprivate。
でも仕様がはっきりしてるならpublicにしていい。
facebookでもプライベートな話は他人に見せる必要がないからprivateだけど
別に他人に見せてもいいならpublicにしてもいいよね
それと一緒
言ってないよ?
外部からアクセスしないならprivate。
でも仕様がはっきりしてるならpublicにしていい。
facebookでもプライベートな話は他人に見せる必要がないからprivateだけど
別に他人に見せてもいいならpublicにしてもいいよね
それと一緒
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:fJlL8BSP■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 中国側が首相答弁の撤回要求、日本側拒否 [夜のけいちゃん★]
- 債券・円・株「トリプル安」に…長期金利1.755%まで上昇、円は対ユーロで史上最安値 [蚤の市★]
- 日本行き空路49万件キャンセル 中国自粛呼びかけ 日本行きチケット予約の約32%に相当 ★5 [ぐれ★]
- 映画「鬼滅の刃」の興行収入急減、日本行き航空券大量キャンセル…中国メディア報道 [蚤の市★]
- 【音楽】Perfume・あ~ちゃんの結婚相手「一般男性」は吉田カバンの社長・吉田幸裕氏(41) 高身長で山本耕史似 [Ailuropoda melanoleuca★]
- 【大分】佐賀関で大規模火災、170棟以上が延焼中 70代男性1人と連絡取れず [ぐれ★]
- フランス「G7に習近平主席を呼びたい」ドイツ「良い考えだ」 高市さん...? [237216734]
- 麻生太郎氏、高市政権と距離を置きはじめる(´・ω・`) [399259198]
- 【悲報】中国営業に熱心な日本人タレントたち、中国のイベントが続々と中止に… まだ予定中のアイドルとか歌手とかたくさんいるけど [452836546]
- 自閉症が「んなっしょい」と連呼するお🏡
- 【悲報】高市効果で「1ドル=160円」が相場へwwwwwwwwwwwwwwwwwwwwwwwwwwwww 止まらぬ高市円安💥💥 [871926377]
- 【悲報】SP500今日も暴落で完全に世界恐慌。高市恐慌として全世界で語り継がれそう [686538148]
