パブリックメソッド経由でテストする
多くの場合、そのクラスのパブリックメソッド経由でプライベートメソッドのテストも同時に行えます。
テストできているか不安があるならテストカバレッジを確認しましょう。
別クラスのパブリックメソッドとする
プライベートなメソッドのテストを書きたいということは、実はテスト対象の責務が多すぎることを
示唆している場合があります。テストがどうしても書きたい場合は、その責務はテスト対象の
プライベートな振る舞いではなく、他の誰かのパブリックな振る舞いなのでしょう。テスト対象の
プライベートメソッドを「クラスの抽出」や「メソッド/関数の移動」を使って、テスト対象の
コラボレータのパブリックメソッドとして抽出し、普通にパブリックメソッドとしてテストしましょう。
テスト対象の可視性を(やや)上げる
例えば Java では、同一のパッケージからのみアクセスできる可視性があり(正式名称ではありませんが
「パッケージプライベート」と呼ばれます)、テストを同一パッケージに配置することでテストから
アクセスできるような設計を行うことがあります。(ただし、この質問の場合は JavaScript なので、この手段はとれません)
プライベートのまま、リフレクションでアクセスしてテストを書く
リフレクションは最後の手段であり、強力な手段でもあります。プロダクトコードに手を入れることが
できない状況や、レガシーコード(テストコードの無いコード)に対する「仕様化テスト(Characterization Test)」を
書いているような状況では、リフレクションは唯一の、かつ強力な手段になります。プライベートメソッドに
テストを書くことのデメリットを理解しつつ、黒魔術の強力さを堪能しましょう。
(ただし、この質問の場合は JavaScript なので、この手段はとれません。JavaScript は比較的緩い言語ですが、クロージャの情報隠蔽は非常に強固です)
まとめ
繰り返すと、プライベートなメソッドや関数をテストする必要は無いと考えています。プライベートなメソッドは、実装の詳細であるからです。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
カプセル化の有害性、オブジェクト指向は愚かな考え
■ このスレッドは過去ログ倉庫に格納されています
649デフォルトの名無しさん
2020/07/04(土) 12:09:30.14ID:M3d71N9d■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【地震】青森 震度6強 [首都圏の虎★]
- 【地震情報】■震度6強■青森三八上北■震度5強■岩手沿岸北部 岩手内陸北 [ぐれ★]
- 人気声優の原田ひとみ、病院での「フルネーム呼び出し」に不満 Xで議論沸騰 [NO FUTURE★]
- こんな首相は前代未聞 問題なのは疑惑追及に居直りキレる幼児性 [バイト歴50年★]
- 【富山】「ドラえもん空港」「ぶり しろえび ほたるいか空港」「すし空港」「ぶり空港」提案続々 新愛称巡り県議会大喜利状態 [七波羅探題★]
- 【警視庁】スマホに入浴中の女性を盗撮するような動画…“盗撮ハンター”自らも盗撮か [nita★]
- 【地上波/DAZNほか】 FIFAワールドカップ2026 総合スレ★167【メキシコ/カナダ/アメリカ】
- 【地上波/DAZNほか】 FIFAワールドカップ2026 総合スレ★166【メキシコ/カナダ/アメリカ】
- 〓たかせん〓 5
- ハム専 ★7
- はません ★2
- 西武線
- 地震 [485983549]
- 地震
- 青森で震度6強 [253992206]
- 大地震やばい!!
- 【NHK速報】青森にて100m級の津波発生 [859851824]
- 🏡ダブパン出禁🏡