SlideShare una empresa de Scribd logo
1 de 43
Descargar para leer sin conexión
テスト駆動開発入門




        yalab
テスト駆動って何?
そんなことは
どうでもいい
テスト駆動って何がいいの?
テスト駆動って何がいいの?
   バグが減る
   ライブラリが作れるようになる
テスト駆動開発ってどうやるの?
いきなり演習
そうだ。ブログのサ
イドバーにカレン
ダーを付けよう
カレンダーって使い
まわしできそうだか
らライブラリにして
おくか。
ということで
カレンダーを作ります。
さて、とりあえずテ
ストを書くか
# calendar_test.rb
require 'test/unit'
require 'date'
require './calendar'

class CalendarTest < Test::Unit::TestCase
  def test_jan_first_day
    jan = Calendar.new(2011, 1)
    assert_equal Date.new(2011, 1, 1), jan.first_day
  end
end
よし、テストする
ぞ。
$ ruby calendar_test.rb
<internal:lib/rubygems/custom_require>:29:in `require': no
such file to load -- ./calendar (LoadError)
        from <internal:lib/rubygems/custom_require>:29:in
`require'
        from calendar_test.rb:3:in `<main>'
アハハ、ファイルが
無いってさ。そりゃ
テスト以前の問題だ
よね。
$ touch calendar.rb
$ ruby calendar_test.rb
Loaded suite calendar_test
Started
E
Finished in 0.000419 seconds.

  1) Error:
test_jan_first_day(CalendarTest):
NameError: uninitialized constant CalendarTest::Calendar
    calendar_test.rb:7:in `test_jan_first_day'

1 tests, 0 assertions, 0 failures, 1 errors, 0 skips

Test run options: --seed 51538
わかってるさ。空
ファイルだからね。
クラスとメソッドぐ
らい書かないとね。
# calendar.rb
class Calendar
  def initialize(year, month)
  end
  def first_day
  end
end
$ ruby calendar_test.rb
Loaded suite calendar_test
Started
F
Finished in 0.000644 seconds.

  1) Failure:
test_jan_first_day(CalendarTest) [calendar_test.rb:8]:
<#<Date: 2011-01-01 (4911125/2,0,2299161)>> expected but
was
<nil>.

1 tests, 1 assertions, 1 failures, 0 errors, 0 skips

Test run options: --seed 39704
よ~し。とりあえず
エラーはなくなっ
た。次はfailureを無く
すか。
# calendar.rb
class Calendar
  def initialize(year, month)
  end
  def first_day
    Date.new(2011, 1, 1)
  end
end
$ ruby calendar_test.rb
Loaded suite calendar_test
Started
.
Finished in 0.000355 seconds.

1 tests, 1 assertions, 0 failures, 0 errors, 0 skips

Test run options: --seed 57673
Cool! テストに通った
ぜ!
お、何だい?Calendar
を作ってるのか?ど
れどれ...
ん~、これはイマイ
チだな。first_dayを呼
ぶたびにDateのイン
スタンスを作ってる
じゃないか。
initializeの時に一回だ
け作るようにしたら
どうだい?
このコードだといく
つもDateのインスタ
ンスを作っちゃう
な。じゃあリファク
タリングするか。
# calendar.rb
class Calendar
  def initialize(year, month)
    @first_day = Date.new(2011, 1, 1)
  end
  def first_day
    @first_day
  end
end
変更を加えたならテ
ストしておけよ。
$ ruby calendar_test.rb
Loaded suite calendar_test
Started
.
Finished in 0.000343 seconds.

1 tests, 1 assertions, 0 failures, 0 errors, 0 skips

Test run options: --seed 19307
よし。テストも通っ
てる。
うん。なかなかいい
な。ただ僕がやるな
らそこはattr_readerを
使ったほうがコード
が短くなっていいと
思うな。
first_dayメソッドって
やってることはgetter
だからattr_readerで書
けるか。
# calendar.rb
class Calendar
  attr_reader :first_day
  def initialize(year, month)
    @first_day = Date.new(2011, 1, 1)
  end
end
コードを書き換えた
らテストをしとけよ
よし、リファクタリ
ングしたしテストを
しとかないと。
$ ruby calendar_test.rb
Loaded suite calendar_test
Started
.
Finished in 0.000375 seconds.

1 tests, 1 assertions, 0 failures, 0 errors, 0 skips

Test run options: --seed 61238
よし、コードは書き
換えたけど同じ動き
をしてる。
演習
   月末を返す last_day メソッドを作ってください。
   第一週の日曜日(2011年1月のカレンダーなら2010年12
    月26日)を返すメソッドを作ってください。
   最終週の土曜日(21011年1月のカレンダーなら2011年2
    月5日)を返すメソッドを作ってください。
   各週と各日を操作するeach_weekとeach_dayを作ってく
    ださい。
   月曜始まりと日曜始まりの両方を使えるようにしてく
    ださい。
アップロード用追記
   今回作成したライブラリには calendar.rb 内で
    require 'date' をしていないという致命的な不具
    合を「意図的に」残しました。
   テストが通ったらからバグが無いとは限らない
    という例とするためです。
アップロード用追記
   しかしながらテストが通ってるうちはテストの
    範囲内では少なくとも正常に動作するという保
    証になります。
テスト重要
資料
   テスト駆動開発入門
    http://www.amazon.co.jp/dp/4894717115
   Ruby/Rails勉強会@関西­20 初級者向けレッスン資料
    http://bit.ly/dKk220

Más contenido relacionado

Destacado

Next GAE Heroku を使って 3分でRailsアプリをリリース
Next GAE Heroku を使って 3分でRailsアプリをリリースNext GAE Heroku を使って 3分でRailsアプリをリリース
Next GAE Heroku を使って 3分でRailsアプリをリリースよしだ あつし
 
よい名前を付けましょう リーダブルなんたらとか
よい名前を付けましょう   リーダブルなんたらとかよい名前を付けましょう   リーダブルなんたらとか
よい名前を付けましょう リーダブルなんたらとかよしだ あつし
 
Twitterでネットストーカーをしよう
TwitterでネットストーカーをしようTwitterでネットストーカーをしよう
Twitterでネットストーカーをしようよしだ あつし
 
僕が勉強をする モチベーションと勉強法
僕が勉強をする モチベーションと勉強法僕が勉強をする モチベーションと勉強法
僕が勉強をする モチベーションと勉強法よしだ あつし
 
私はいかにしてpull request を行ったか - あるいは social development について
私はいかにしてpull request を行ったか - あるいは social development について私はいかにしてpull request を行ったか - あるいは social development について
私はいかにしてpull request を行ったか - あるいは social development についてよしだ あつし
 
TOEICテスト学習コース~ETS公式問題集収録~
TOEICテスト学習コース~ETS公式問題集収録~TOEICテスト学習コース~ETS公式問題集収録~
TOEICテスト学習コース~ETS公式問題集収録~Uchida Human Development
 
15分でできるSQLインジェクション
15分でできるSQLインジェクション15分でできるSQLインジェクション
15分でできるSQLインジェクションよしだ あつし
 
低レイヤから見たrubyプログラミング
低レイヤから見たrubyプログラミング低レイヤから見たrubyプログラミング
低レイヤから見たrubyプログラミングよしだ あつし
 
GCS2013 リーンソフトウェア開発から見るゲーム開発7つのムダ
 GCS2013 リーンソフトウェア開発から見るゲーム開発7つのムダ  GCS2013 リーンソフトウェア開発から見るゲーム開発7つのムダ
GCS2013 リーンソフトウェア開発から見るゲーム開発7つのムダ Hiroyuki Tanaka
 

Destacado (15)

Next GAE Heroku を使って 3分でRailsアプリをリリース
Next GAE Heroku を使って 3分でRailsアプリをリリースNext GAE Heroku を使って 3分でRailsアプリをリリース
Next GAE Heroku を使って 3分でRailsアプリをリリース
 
よい名前を付けましょう リーダブルなんたらとか
よい名前を付けましょう   リーダブルなんたらとかよい名前を付けましょう   リーダブルなんたらとか
よい名前を付けましょう リーダブルなんたらとか
 
Twitterでネットストーカーをしよう
TwitterでネットストーカーをしようTwitterでネットストーカーをしよう
Twitterでネットストーカーをしよう
 
僕が勉強をする モチベーションと勉強法
僕が勉強をする モチベーションと勉強法僕が勉強をする モチベーションと勉強法
僕が勉強をする モチベーションと勉強法
 
私はいかにしてpull request を行ったか - あるいは social development について
私はいかにしてpull request を行ったか - あるいは social development について私はいかにしてpull request を行ったか - あるいは social development について
私はいかにしてpull request を行ったか - あるいは social development について
 
Rails3使用雑感
Rails3使用雑感Rails3使用雑感
Rails3使用雑感
 
Railsの今昔
Railsの今昔Railsの今昔
Railsの今昔
 
TOEICテスト学習コース~ETS公式問題集収録~
TOEICテスト学習コース~ETS公式問題集収録~TOEICテスト学習コース~ETS公式問題集収録~
TOEICテスト学習コース~ETS公式問題集収録~
 
15分でできるSQLインジェクション
15分でできるSQLインジェクション15分でできるSQLインジェクション
15分でできるSQLインジェクション
 
Dockerプレゼン
DockerプレゼンDockerプレゼン
Dockerプレゼン
 
Rubyコードの最適化
Rubyコードの最適化Rubyコードの最適化
Rubyコードの最適化
 
低レイヤから見たrubyプログラミング
低レイヤから見たrubyプログラミング低レイヤから見たrubyプログラミング
低レイヤから見たrubyプログラミング
 
Vue.js ハンズオン資料
Vue.js ハンズオン資料Vue.js ハンズオン資料
Vue.js ハンズオン資料
 
Gitの使い方あれこれ
Gitの使い方あれこれGitの使い方あれこれ
Gitの使い方あれこれ
 
GCS2013 リーンソフトウェア開発から見るゲーム開発7つのムダ
 GCS2013 リーンソフトウェア開発から見るゲーム開発7つのムダ  GCS2013 リーンソフトウェア開発から見るゲーム開発7つのムダ
GCS2013 リーンソフトウェア開発から見るゲーム開発7つのムダ
 

Similar a テスト駆動開発入門

第4回勉強会 単体テストのすすめ
第4回勉強会 単体テストのすすめ第4回勉強会 単体テストのすすめ
第4回勉強会 単体テストのすすめhakoika-itwg
 
はこだてIKA 第4回勉強会 単体テスト
はこだてIKA 第4回勉強会 単体テストはこだてIKA 第4回勉強会 単体テスト
はこだてIKA 第4回勉強会 単体テストSeiji KOMATSU
 
Java scriptによるテスト駆動開発
Java scriptによるテスト駆動開発Java scriptによるテスト駆動開発
Java scriptによるテスト駆動開発Hidekazu Nakamura
 
Java scriptによるテスト駆動開発
Java scriptによるテスト駆動開発Java scriptによるテスト駆動開発
Java scriptによるテスト駆動開発Hidekazu Nakamura
 
タダで始めるテストファースト入門 ~ C# Express + NUnit
タダで始めるテストファースト入門 ~ C# Express + NUnitタダで始めるテストファースト入門 ~ C# Express + NUnit
タダで始めるテストファースト入門 ~ C# Express + NUnitYasuhiko Yamamoto
 
TDD Boot Camp Tokyo for C++ 2014-01 補講
TDD Boot Camp Tokyo for C++ 2014-01 補講TDD Boot Camp Tokyo for C++ 2014-01 補講
TDD Boot Camp Tokyo for C++ 2014-01 補講Takashi Imagire
 
C# から java へのプログラム移植で体験したtddの効果は?
C# から java へのプログラム移植で体験したtddの効果は?C# から java へのプログラム移植で体験したtddの効果は?
C# から java へのプログラム移植で体験したtddの効果は?Shinichi Hirauchi
 
テスティングフレームワークに入門してみた - Swift編
テスティングフレームワークに入門してみた - Swift編テスティングフレームワークに入門してみた - Swift編
テスティングフレームワークに入門してみた - Swift編Hisakuni Fujimoto
 
Gradleどうでしょう
GradleどうでしょうGradleどうでしょう
GradleどうでしょうTakuma Watabiki
 
Rails初心者レッスン lesson4 2edition
Rails初心者レッスン lesson4 2editionRails初心者レッスン lesson4 2edition
Rails初心者レッスン lesson4 2editionSatomi Tsujita
 
Let s database_testing
Let s database_testingLet s database_testing
Let s database_testingYuji Shimada
 
COD2012 T2/T3 : 実機で試す SQL Server の現状取得 ハンズオンマニュアル
COD2012 T2/T3 : 実機で試す SQL Server の現状取得 ハンズオンマニュアルCOD2012 T2/T3 : 実機で試す SQL Server の現状取得 ハンズオンマニュアル
COD2012 T2/T3 : 実機で試す SQL Server の現状取得 ハンズオンマニュアルMasayuki Ozawa
 
Introduction to Continuous Test Runner MakeGood
Introduction to Continuous Test Runner MakeGoodIntroduction to Continuous Test Runner MakeGood
Introduction to Continuous Test Runner MakeGoodAtsuhiro Kubo
 
ゼロから始めたE2Eテスト
ゼロから始めたE2Eテストゼロから始めたE2Eテスト
ゼロから始めたE2Eテストushiboy
 
Awsで実現するseleniumテスト高速術
Awsで実現するseleniumテスト高速術Awsで実現するseleniumテスト高速術
Awsで実現するseleniumテスト高速術finoue
 
TDDってなんなの?(What is TDD)
TDDってなんなの?(What is TDD)TDDってなんなの?(What is TDD)
TDDってなんなの?(What is TDD)seichi23
 

Similar a テスト駆動開発入門 (20)

第4回勉強会 単体テストのすすめ
第4回勉強会 単体テストのすすめ第4回勉強会 単体テストのすすめ
第4回勉強会 単体テストのすすめ
 
はこだてIKA 第4回勉強会 単体テスト
はこだてIKA 第4回勉強会 単体テストはこだてIKA 第4回勉強会 単体テスト
はこだてIKA 第4回勉強会 単体テスト
 
Java scriptによるテスト駆動開発
Java scriptによるテスト駆動開発Java scriptによるテスト駆動開発
Java scriptによるテスト駆動開発
 
Java scriptによるテスト駆動開発
Java scriptによるテスト駆動開発Java scriptによるテスト駆動開発
Java scriptによるテスト駆動開発
 
タダで始めるテストファースト入門 ~ C# Express + NUnit
タダで始めるテストファースト入門 ~ C# Express + NUnitタダで始めるテストファースト入門 ~ C# Express + NUnit
タダで始めるテストファースト入門 ~ C# Express + NUnit
 
TDD Boot Camp Tokyo for C++ 2014-01 補講
TDD Boot Camp Tokyo for C++ 2014-01 補講TDD Boot Camp Tokyo for C++ 2014-01 補講
TDD Boot Camp Tokyo for C++ 2014-01 補講
 
C# から java へのプログラム移植で体験したtddの効果は?
C# から java へのプログラム移植で体験したtddの効果は?C# から java へのプログラム移植で体験したtddの効果は?
C# から java へのプログラム移植で体験したtddの効果は?
 
テスティングフレームワークに入門してみた - Swift編
テスティングフレームワークに入門してみた - Swift編テスティングフレームワークに入門してみた - Swift編
テスティングフレームワークに入門してみた - Swift編
 
Gradleどうでしょう
GradleどうでしょうGradleどうでしょう
Gradleどうでしょう
 
Tdd
TddTdd
Tdd
 
Rails初心者レッスン lesson4 2edition
Rails初心者レッスン lesson4 2editionRails初心者レッスン lesson4 2edition
Rails初心者レッスン lesson4 2edition
 
Rspec
RspecRspec
Rspec
 
Let s database_testing
Let s database_testingLet s database_testing
Let s database_testing
 
COD2012 T2/T3 : 実機で試す SQL Server の現状取得 ハンズオンマニュアル
COD2012 T2/T3 : 実機で試す SQL Server の現状取得 ハンズオンマニュアルCOD2012 T2/T3 : 実機で試す SQL Server の現状取得 ハンズオンマニュアル
COD2012 T2/T3 : 実機で試す SQL Server の現状取得 ハンズオンマニュアル
 
Introduction to Continuous Test Runner MakeGood
Introduction to Continuous Test Runner MakeGoodIntroduction to Continuous Test Runner MakeGood
Introduction to Continuous Test Runner MakeGood
 
CruiseControl.NET設置
CruiseControl.NET設置CruiseControl.NET設置
CruiseControl.NET設置
 
Casper導入資料
Casper導入資料Casper導入資料
Casper導入資料
 
ゼロから始めたE2Eテスト
ゼロから始めたE2Eテストゼロから始めたE2Eテスト
ゼロから始めたE2Eテスト
 
Awsで実現するseleniumテスト高速術
Awsで実現するseleniumテスト高速術Awsで実現するseleniumテスト高速術
Awsで実現するseleniumテスト高速術
 
TDDってなんなの?(What is TDD)
TDDってなんなの?(What is TDD)TDDってなんなの?(What is TDD)
TDDってなんなの?(What is TDD)
 

テスト駆動開発入門