#テストとは
まずは単なるテストについてです。
デバッグです。バグを探してそのバグを取り除いてクオリティを上げること。
開発に際してプログラムを書くこと多くありません。
下記のテスト駆動開発とは別物です。
#テスト駆動開発(Test Driven Development = TDD)
歴史:意外と昔から存在してます。1989年に最初のTDDフレームワークとして知られているSUnitが誕生し、動作しました。概念としてはもっと昔からあったようですがここでは割愛
###どんなものなのか
ちゃんと動くかチェックしてくれるプログラムから書く という手法
レッド(動かない) グリーン(動く) リファクタリング(きれいにする)
の3つに分けて開発を進めていきます。
■レッド
テストコードを書いてErrorを吐いてもらいます。この状態がレッドです。
想定したErrorが出るところから開発が始まる。
もしここで想定通りプログラムがErrorを吐いてくれないのであればそのコードも疑ってください。
■グリーン
プロダクトコードを書いてテストコードにErrorを吐かせないようにします。
その際のコードは実際のプロダクトに沿ったものでなくていいのでテストコードにTrueを
返してもらうようにコードを書きます。後述しますが無理矢理でもいいです。
■リファクタリング
グリーンになった状態でプロダクトを作成していきます。
ここまではどんな形でもいいのでグリーンの状態に持っていくプロダクトコードを書いてきました。
ここからは本来実装したい機能のコードに変えていく事になります。
これがリファクタリングです。
####例
テストコード 文字の数を数えます。
とりあえずrubyで。
テストコード
def setup
@counter = Counter.new
end
def test_moji_count
str = ' this sentence has over 7 letters'
actual = @counter.send(:moji_count, str)
expected = 7
assert_equal expected, actual
end
プロダクトコード
def moji_count(str)
str.gsub(/[^a-z]/,'').size
end
###TDDが目指すもの
ちゃんと動くコード && きれいに実装すること
開発を進める際に、まずは機能を作ってからあとできれいにしよう、リファクタリングしようと考える方向けです。
とりあえず動くものを作った後に発生する問題点があります。
問題点
①コードが汚い 直さなければ・・・
②動いているからいいか・・・(直さない)
③変に弄って動かなくなったらどうしよう
上記の問題を解決してくれるのがTDDなのです。
先にErrorを吐いてくれる監視員を作ってから開発ができるので命綱のような役割になり
安心して開発に取り組むことが来ます。
テストファーストな開発方法でした。
参考記事
https://rooter.jp/web-crawling/ruby-testcode/
https://postd.cc/test-driven-development/
https://dev.classmethod.jp/study_meeting/read/what-tdd/
https://railsguides.jp/testing.html
https://inokara.hateblo.jp/entry/2018/02/08/230702