このスレの結論
短くまとめると、プライベートなメソッドのテストを書く必要は 無い と考えています。
パブリックメソッド経由でテストする
多くの場合、そのクラスのパブリックメソッド経由でプライベートメソッドのテストも同時に行えます。
テストできているか不安があるならテストカバレッジを確認しましょう。
別クラスのパブリックメソッドとする
プライベートなメソッドのテストを書きたいということは、実はテスト対象の責務が多すぎることを
示唆している場合があります。テストがどうしても書きたい場合は、その責務はテスト対象の
プライベートな振る舞いではなく、他の誰かのパブリックな振る舞いなのでしょう。テスト対象の
プライベートメソッドを「クラスの抽出」や「メソッド/関数の移動」を使って、テスト対象の
コラボレータのパブリックメソッドとして抽出し、普通にパブリックメソッドとしてテストしましょう。
テスト対象の可視性を(やや)上げる
例えば Java では、同一のパッケージからのみアクセスできる可視性があり(正式名称ではありませんが
「パッケージプライベート」と呼ばれます)、テストを同一パッケージに配置することでテストから
アクセスできるような設計を行うことがあります。(ただし、この質問の場合は JavaScript なので、この手段はとれません)
プライベートのまま、リフレクションでアクセスしてテストを書く
リフレクションは最後の手段であり、強力な手段でもあります。プロダクトコードに手を入れることが
できない状況や、レガシーコード(テストコードの無いコード)に対する「仕様化テスト(Characterization Test)」を
書いているような状況では、リフレクションは唯一の、かつ強力な手段になります。プライベートメソッドに
テストを書くことのデメリットを理解しつつ、黒魔術の強力さを堪能しましょう。
(ただし、この質問の場合は JavaScript なので、この手段はとれません。JavaScript は比較的緩い言語ですが、クロージャの情報隠蔽は非常に強固です)
まとめ
繰り返すと、プライベートなメソッドや関数をテストする必要は無いと考えています。プライベートなメソッドは、実装の詳細であるからです。
カプセル化の有害性、オブジェクト指向は愚かな考え
■ このスレッドは過去ログ倉庫に格納されています
752デフォルトの名無しさん
2020/07/04(土) 20:02:50.07ID:M3d71N9d■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【サッカーW杯】 観客285万人に到達 1試合平均は6万5000人 過去最多を大幅更新ペース [阿弥陀ヶ峰★]
- クールジャパン機構、累積損失500億円超 政府が廃止など検討へ ★2 [ぐれ★]
- 「電話鳴り止まない」AI予約サービス「オートリザーブ」に飲食店困惑 “勝手に”公式マーク表示も 専門家「AIうまく機能していない」 [ぐれ★]
- 【シコ╰⋃╯シコ】ドラッグストア駐車場で陰部露出し自慰行為した公然わいせつ容疑 55歳男を現行犯逮捕 盛岡市 [nita★]
- AKB48契約解除の花田藍衣、動画で悲痛な訴え「運営から性的な質問をされ…峯岸さんのように坊主にして誠意を見せろと言われ坊主に」★6 [冬月記者★]
- 【東京】30代女性…不妊治療し妊娠判明後に「実は妻子が」 独身偽装の男性に460万円の賠償命令 ★2 [ぐれ★]
- 🇯🇵戦前の特高、日本人が私怨で密告しまくるので困惑していた😭 [399259198]
- 【文春】高市、暴かれた本性。木下秘書「文春は中国から毎週一千万円もらっている」自民党内から総スカンなど🤓 [359965264]
- キオクシアさん、一時98000まで上がるも現在87000 [498389267]
- 塩粘の靴ダサくねー?👊😅👊🏡👞
- 【画像】カリスマ美容師、薄毛男性を救ってしまう [834922174]
- 温泉5歳全裸行方不明。父親「な、なんだと! 息子が中から鍵を掛けた!? ここは硬貨で解錠だ!」 [592058334]