1. ホーム
  2. unit-testing

[解決済み】ユニットテストとは何ですか?[クローズド]

2022-04-05 19:06:15

質問

特定の言語でユニットテストを行うための「方法」を尋ねる質問は多く見受けられますが、「何を」「なぜ」「いつ」行うかを尋ねる質問は見当たりませんでした。

  • それは何ですか?
  • どんな効果があるのですか?
  • なぜ使う必要があるのですか?
  • どのような場合に使用するのか(また、どのような場合に使用しないのか)?
  • よくある落とし穴や誤解は?

どのように解決するのか?

ユニットテストとは、大雑把に言うと、コードの断片をテストコードで分離してテストすることです。すぐに思いつく利点は、以下の通りです。

  • テストの実行が自動化され、繰り返し実行できるようになります。
  • GUIによるポイント&クリックテストよりも、はるかに細かいレベルでのテストが可能です

テストコードがファイルに書き込んだり、データベース接続を開いたり、ネットワーク上で何かを行う場合は、統合テストに分類する方が適切であることに注意してください。統合テストは良いことですが、ユニットテストと混同してはいけません。ユニットテストのコードは、短く、甘く、素早く実行できるものであるべきです。

ユニットテストのもう一つの見方は、テストを先に書くということです。これはテスト駆動開発(略してTDD)と呼ばれるものです。TDDはさらなる利点をもたらします。

  • 将来必要になるかもしれない憶測のコードを書かない -- テストをパスするのに必要なコードだけを書く
  • 書いたコードは必ずテストでカバーされる
  • テストを先に書くことで、コードをどのように呼び出すかを考えざるを得なくなり、通常、長い目で見てコードの設計が改善されます。

もし、今、ユニットテストをやっていないなら、始めることをお勧めします。xUnitの本であれば、どんな本でも構いません。

ユニットテストを書くことが苦痛になることがあります。そのようなときは、助けてくれる人を探して、"ただクソコードを書け"という誘惑に耐えてください。ユニットテストは、皿洗いのようなものです。いつも楽しいわけではありませんが、あなたの比喩的なキッチンをきれいに保つことができます。)


編集部:そんなによくあることなのかどうかわかりませんが、ひとつ誤解を思い浮かべました。プロジェクトマネージャーが、「ユニットテストのせいでチームはすべてのコードを2回書かされた」と言っているのを聞いたことがあります。もしそう見えるし、そう感じるとしたら、まあ、やり方が間違っているのでしょう。テストを書くことは通常、開発をスピードアップさせるだけでなく、他の方法では得られない便利な "now I'm done" インジケータを提供するのです。