🔖

privateメソッドはテストするけどテストしないって話

2022/10/10に公開約1,200字3件のコメント

概要

下記のスライドのpriveteメゾッドのテストの扱いについて引っかかったので、今の私の考えについて書き連ねてみました。
https://speakerdeck.com/hgsgtk/practices-to-write-better-unit-test

対象読者

テストを意識し始めた初心者
(つっこみを入れてくれるつよつよエンジニアがいると嬉しい)

まとめ

  • unitテストの維持・管理コストは意外と高いので、減らせるテストは減らしたい。
  • privateメソッドはクラスの外で使われることに対して責任を持たない上、変更頻度が多い。そのため、privateメソッドのテストは最終的には捨てる(publicメソッドで担保する)。
  • とは言っても、テスト駆動開発がやりづらいのでpublicメソッドのテストの完成度が8割くらいになるまでは書いていた方が良さげだど思った。

自己紹介

エンジニア2年目。大学は非情報系。最近、テスト駆動開発に興味を持ち始めました。

きっかけ

下記のツイートが目に入った
https://twitter.com/mr_ijij/status/1578709960909021184

スライドの内容まとめ

意図を伝えるテスト

  • 最初に読まれるDocumentであることを意識して書く。
  • 小さいテスト。1回についひとつのことをテストする。

テストを独立させる

  • privateメソッドはテストしない方がベター
  • 外部システムから隔離する
  • テスト間の独立性を高める

重複を最小限に

  • テストコードもコードなので、可読性を上げるために重複を無くしていく

テストが容易な設計に

  • テスト駆動開発をする

疑問

privateメソッドをテストしないとテスト駆動開発しづらそうだなと思いました。
テスト駆動の肝は「小さく回す」ところにあると思っています。そのため、privateメソッドのテストを書かずにpublicメソッドのテストを書き始めるのことは、その原則に反している気がしました。

privateメソッドをテストしない理由

  • 変更頻度が高い。そのため、テストの修正の頻度も高くなるから。
  • 外に使用されることを考えていない。しかし、テストをするということは外で使うということになる。そのため、密結合になるから。
  • そもそもprivateメソッドはpubnlicメソッドで使われている。そのため。publicメソッドのテストでカバーできるから。

解決方法?

  • 最初はprivateメソッドもテストしていく
  • publicメソッドのテストの大枠が完成したら、privateメゾッドテストを意識して消す

所感

テストに関してよわよわレベルの人間なので、こういうノウハウ的なスライドはとても助かります。勉強になりました。

最後まで駄文を読んでいただきありがとうございました!

Discussion

すごい些細なことで申し訳ないのですが、メゾットってあんまり言わないような気がしていて、英語発音だったりしますか?普段メソッドって発音されることが多い気がしていて、気になってしまいました。

音で勘違いして覚えてました。修正します。

ありがとうございます。指摘されなければずっとメゾットって言ってました。

ログインするとコメントできます