Test-Driven Development using FIT 北野 弘治 オブジェクト倶楽部 この資料について この資料は、Agile Development Conference 2003において、 Ward Cunningham氏が行った チュートリアル資料を参考に北野弘治が翻訳追 記を行って作成しております。 Test-Driven Development このチュートリアルは、FIT(Framework for Integrated Test)を利用したテスト駆動開発のテ クニックについて紹介する FITとは、ユニットテストや受け入れテストを行う ためのフレームワークであり、プログラミング言 語に依存しない形式でテストの記述が行える Guide Development FITは、テストの結果が正しくなるようにプログラミングを ガイドします いわば、標識を確認しながら道をすすんでいくようなイメージ Refactoring TDDをすることにより、Test-Driven-Designが得 られ、それはRefactoringされた奇麗なデザイン となる テストしやすいデザイン FIT FITは、言語に依存していないtest-tableと言語 に依存したtest-fixtureとで構成されている Test-tableは、ユーザや顧客でも容易に記述すること が可能 Test-fixtureは、製品とtest-tableとのインターフェイス である FITをより美味く召し上がるために FITNESSEを利用する FITNESSEとは、FIT+Wikiで、Wiki上でテストの記 述、テスト実行、テスト結果参照が行える ダウンロード後、解凍のみでWikiサーバが立ち上が るためインストールが容易 Install FIT(NESSE) FITNESSEをダウンロード http://fitnesse.org/よりダウンロードする 最新はv20030728版 実際には、sourceforgeにある Fitnesse20030728.zip(バイナリ) Fitnesse_src20030728.zip(ソース) ここではバイナリをダウンロード FITNESSEの設定 ダウンロードしたファイルを Zip解凍する。 Javaが入っているPCは、解 凍後のrun.batを実行する Javaはhttp://java.sun.com/ からダウンロード http://localhost/にアクセス Fit Tasks FIT: Test 30/360 Calendar 金融機関のいくつかは、1ヶ月を30日、1年を3 60日として扱っている(30/360Calendarとする) 30/360Calendarとして日付計算をするテストを 記述する カラムとしては、form, to, days() days()はfromからtoまでの経過日数をintとして 返す ColumnFixtureのサブクラスとして実装すること 次のページにあるテストをパスすること FIT: Test 30/360 Calendar fitsample.ThirtyThreeSixty from to days() 2001/01/10 2001/01/20 10 2001/01/10 2001/02/10 30 2001/01/10 2002/01/10 360 2001/01/10 2002/12/25 705 FIT: 1. create new page 30/360カレンダーのテストを記述 するため、Wiki上に新しいページ を作成します。 http://localhost/ FrontPageにお いて、[Edit]をクリックし、 FrontPageを編集モードにします。 最後の行に『ThirtyThreeSixty』 と書き、[Save]します。 FrontPageの 『ThirtyThreeSixty』の所の『?』 をクリックすると、新しいページが 作成されます。 FIT: 2. Edit Test 新たに作成した、ThirtyThreeSixtyページの[Edit]をク リックし、テストを記述し、Saveします。 |ThirtyThreeSixty| |from|to|days()| |2001/01/10|2001/01/20|10| |2001/01/10|2001/02/10|30| |2001/01/10|2002/12/25|705| ---ClassPath ここでは、テストの記述を行っています。 一行目に指定するのは、テスト対象のFixtureクラスです。 FIT: 3. Config Test ThirtyThreeSixtyページの[Properties]をクリック し、[Test]にチェックし、[Save]します。 FIT: 4. Add ClassPath テスト実行に必要なクラスパスを編集します。 ThirtyThreeSixtyページのClassPathをクリック し、Classpathページの[Edit]を実行します。 !path fit.jar !path fitnesse.jar !path sample [Save]をし、FrontPageよりThirtyThreeSixty ページに戻ります。 FIT: 5. Run Test 一度テストを走らせてみ ましょう。 テスト対象のクラス (ThirtyThreeSixtyクラス) がないというメッセージが でます。 →(ガイド) ThirtyThreeSixtyクラスを 作れ!! FIT: 6. Create new class ThirtyThreeSixtyクラスを作成します。 package fitsample; import fit.ColumnFixture; public class ThirtyThreeSixty extends ColumnFixture{ } fitnesse/sample/fitsampleフォルダにThirtyThreeSixty.java として保存し、コンパイルします。 > javac -classpath fit.jar -d sample sample\fitsample\*.java FIT: 7. Re Run Test FIT: 8. Create from-to Field from, toフィールドが無い!というエラーメッセー ジが出たので、ThirtyThreeSixtyクラスに追加し ます。 package fitsample; import fit.ColumnFixture; import java.util.Date; public class ThirtyThreeSixty extends ColumnFixture{ public Date from; public Date to; } 保存し、コンパイルします。 FIT: 9 Re-Re Run Test 再びテストを実行します。 days()メソッドが無い!と エラーメッセージが出て います。 FIT: 10. Create days() Method days()メソッドを実装します。今の段階では、 return 0; とし、コンパイルが通る最小限の実装 とします。 package fitsample; import fit.ColumnFixture; import java.util.Date; public class ThirtyThreeSixty extends ColumnFixture{ public Date from; public Date to; public int days() { return 0; } } Saveしコンパイルします。 FIT: 11. Re Re Re Run Test 再度テストを実行します。 赤になっている部分がテ ストが失敗している部分 となる。 全て期待している値と異な る(今は単に0を返すため) ため赤の表示になる。 FIT: 12. Fake IT テストの一つのみに注目し、そのテストが通る最 小のコードを実装してみる。『return 10;』とする。 package fitsample; import fit.ColumnFixture; import java.util.Date; public class ThirtyThreeSixty extends ColumnFixture{ public Date from; public Date to; public int days() { return 10; } } Saveしコンパイルする。 FIT: 13. RE^4 Run Test 再びテストを実行してみ る。 緑になっている部分がテス トが成功している部分 FIT: 14. Implementation 今までのように、細かい 周期で実装→テスト→実 装→テストをして全ての テストを通るようにしてみ ましょう。 考察 actualDays()を追加し、テストしてみましょう。 オブジェクト指向の観点から考え、クラス分割し てみましょう。 FITのColumnFixtureクラスの特徴について調 べてみましょう。
© Copyright 2024 ExpyDoc