テスト駆動開発の書籍を読みながらテスト駆動開発に挑戦。
まだ書籍を完読していないので、自分なりに着手しやすい方法を記載しておきます。
環境はRubyOnRailsなのでRSpecを活用します。
TODOリストを作成する
必要になりそうなテストをリストアップしておく。
最初は思いつく限りでいよいので、テスト項目を明確にしておく。
-
報酬計算
-
A評価の報酬
- 支払い対象がXXであること
-
XXXXXXの場合
- 報酬を支払うこと
-
XXXXXXの場合
- 支払い総額が正しいこと
-
A評価の報酬
テストコードを先に書く(テストファースト)
実装を進めたくなると思うが、ここは我慢をしてテストコードから書く。
先に実装を進めると、何かと理由をつけて後でテストコードを書かない可能性があるので。
describe,context,itにテストの仕様がわかるような記載にする。
TODOリストをそのまま転記する感じだと楽だと思います。
describe
テスト対象
context
特定の条件
it
期待するアウトプット
describe '報酬計算' do
describe 'A評価の報酬' do
before do
end
it '支払い対象がXXであること' do
...テスト処理...
end
context 'XXXXXXの場合' do
it '報酬を支払うこと' do
...テスト処理...
end
end
context 'XXXXXXの場合' do
it '報酬を支払わないこと' do
...テスト処理...
end
end
it '支払い総額が正しいこと' do
...テスト処理...
end
end
テストコードができたら、実装を進める。
適宜テストコードを修正して、とにかくテストをグリーンにする。
rspec spec/fee_spec.rb
Finished in 15.67 seconds
6 examples, 0 failures, 0 pending
リファクタリング
コードが汚い状態になっているので、リファクタリングをする。
まめにテストを実行しレッドの状態なら、テストコードor実装を直して、グリーンの状態にする。
実装中に必要なテストを思いついたら、TODOリストに加え、テストコードの実装を追加する。
リファクタリングを終えてテストがグリーンになればそのテストのTODOリストにチェックを入れておく。
完了条件
TODOリストが全てチェックがはいえれば、完了。
まとめ
テストコードと一緒に実装をすすめると工数は多くなりますが、以下メリットがあると思います。
- テストコードを見れば、その機能の仕様が把握しやすい(describeに書いてるあるため)
- CIの自動テスト環境と組み合わせれば、他の開発時によって引き起こされたデグレに気づける
- いつでもリファクタリングしやすくなる
- 自信を持って開発できる
自信を持って開発できる
というのがいいですね。
この先長いので活き活きと仕事をしたいもんです。
今後もテスト駆動開発を極めていきたいと思います。
書籍の内容をだいぶ省略していますので、間違っていたらご指摘頂ければと思います。