機能追加部分をテスト駆動開発でやろうとは思ったものの、テスト書くのにめちゃくちゃ時間かかりすぎて、これ意味あるのか?と思ったり、迷走しはじめたので読んだ。
事前にたくさんフィクスチャを用意しなければいけなかったり、少しコードを直しただけで、壊れるテストはあまり意味がないと考えているので、テストを書くにも技術がいると感じる。
この本はJUnitなので当然Javaのサンプルコードで書かれている。PHPとJavaという違いはあるものの、テストの本質的な部分は変わらないので問題ないと思う。PHPは7.4からプロパティに型宣言できるようになるから、どんどんJavaみたいだなと感じる。いっそのこと変数も型宣言できるようにしてほしい。
- そもそもユニットテストとはなにか。
ユニットテストって単体テストのことではないのか?テストコードを書いているときにこれは単体テストの範疇なのかと疑問に思うことが多々あった。ユニットテストの定義についても書かれている。その中でユニットテスト=単体テストだけを指すとは限らないことを指摘しており、「本書ではクラスやメソッド単位でプログラムの仕様を検証する自動化されたテスト」を指すと書かれている。なので、単体テストはユニットテストに含まれるけど、ユニットテストは単体テスト以外のものも含まれるという理解に落ち着いた。
- テストメソッド名は日本語と英語どちらで書くべきなのか。
本を読んでというより最近気づいたけど、ユニットテストのメソッド名は日本語でいいなと気づいた。なんか気持ち悪いから英語で書いてたりしてたけど、
1. パッと見て何をテストしているのかわかるから
2. テストメソッド名を考える時間をなくせるから
という理由で自分は日本語で書くことにした。同僚に外国の方がいる場合などは英語で書いたほうが良いとは思いますが、そういう環境でもないので。
- 今までよく知らなかった単語の理解が進んだ
テストケース=1つのテスト項目。ある条件に対して期待される動きを記述したもの。
テストスイート=いくつかのテストケースをまとめたもの。@groupとか。
テストフィクスチャ=テスト実行時に必要とされるデータや状態。
テストダブル=依存するオブジェクトの代役となるスタブやモックの総称。double=代役、影武者などを意味する。