0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

すぐ始められるテスト駆動開発(RSpec)

Last updated at Posted at 2018-08-28

テスト駆動開発の書籍を読みながらテスト駆動開発に挑戦。
まだ書籍を完読していないので、自分なりに着手しやすい方法を記載しておきます。

環境はRubyOnRailsなのでRSpecを活用します。

TODOリストを作成する

必要になりそうなテストをリストアップしておく。
最初は思いつく限りでいよいので、テスト項目を明確にしておく。

  • 報酬計算
    • A評価の報酬
      • 支払い対象がXXであること
      • XXXXXXの場合
        • 報酬を支払うこと
      • XXXXXXの場合
        • 支払い総額が正しいこと

テストコードを先に書く(テストファースト)

実装を進めたくなると思うが、ここは我慢をしてテストコードから書く。
先に実装を進めると、何かと理由をつけて後でテストコードを書かない可能性があるので。

describe,context,itにテストの仕様がわかるような記載にする。
TODOリストをそのまま転記する感じだと楽だと思います。

describe テスト対象
context 特定の条件
it 期待するアウトプット

fee_spec.rb

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の自動テスト環境と組み合わせれば、他の開発時によって引き起こされたデグレに気づける
  • いつでもリファクタリングしやすくなる
  • 自信を持って開発できる

自信を持って開発できるというのがいいですね。
この先長いので活き活きと仕事をしたいもんです。

今後もテスト駆動開発を極めていきたいと思います。
書籍の内容をだいぶ省略していますので、間違っていたらご指摘頂ければと思います。

参考

テスト駆動開発

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?