卒業研究でテスト駆動開発(TDD)を研究してると聞いて
TLで面白いつぶやきを見つけた。
最近Javaやってないし、久しぶりにJUnitで遊んでみようかなぁー。
という訳で、やってみた。
話題の卒研のページ
まずはJUnitLogGetをインストールする
と、いきなりエラーにw
Cannot complete the install because of a conflicting dependency. Software being installed: JUnitLogGet 1.0.2.201006180845 (jp.sagauniv.JUnitLogGet.feature.feature.group 1.0.2.201006180845) Software currently installed: Eclipse IDE for Java EE Developers 1.2.1.20090918-0703 (epp.package.jee 1.2.1.20090918-0703) Only one of the following can be installed at once: Core Resource Management 3.5.0.v20090512 (org.eclipse.core.resources 3.5.0.v20090512) Core Resource Management 3.5.2.R35x_v20091203-1235 (org.eclipse.core.resources 3.5.2.R35x_v20091203-1235) Core Resource Management 3.5.1.R35x_v20090826-0451 (org.eclipse.core.resources 3.5.1.R35x_v20090826-0451) Cannot satisfy dependency: From: Eclipse IDE for Java EE Developers 1.2.1.20090918-0703 (epp.package.jee 1.2.1.20090918-0703) To: org.eclipse.epp.package.jee.feature.feature.group [1.2.1.20090918-0703] Cannot satisfy dependency: From: JUnitLogGet 1.0.2.201006180845 (jp.sagauniv.JUnitLogGet.feature.feature.group 1.0.2.201006180845) To: org.eclipse.core.resources 3.5.2 Cannot satisfy dependency: From: Java EE IDE Feature 1.2.1.20090918-0703 (org.eclipse.epp.package.jee.feature.feature.group 1.2.1.20090918-0703) To: org.eclipse.platform.feature.group [3.5.1.R35x_v20090910-9gEeG1_FthkNDSP2odXdThaOu9GFDPn83DGB7] Cannot satisfy dependency: From: Eclipse Platform 3.5.1.R35x_v20090910-9gEeG1_FthkNDSP2odXdThaOu9GFDPn83DGB7 (org.eclipse.platform.feature.group 3.5.1.R35x_v20090910-9gEeG1_FthkNDSP2odXdThaOu9GFDPn83DGB7) To: org.eclipse.core.resources [3.5.1.R35x_v20090826-0451]
Java EE Developersが無いのが原因かな?
「ヘルプ」→「更新の確認」でチェックしてみると、Java EE Developersの項目があったので更新してみた。
そして、再度JUnitLogGetをインストールすると上手くインストールできました。
課題に掛かった時間
- 課題1(10分)
- 課題2(20分)
- 課題3(25分)
- 課題4(1時間35分)
課題4の「Readerを引数にとるコンストラクタ」を確認するテストケースを書こうとして、ハマりました。
少し時間掛かりましたが、途中で「コンストラクタのテストが要るのか?」と考え、コンストラクタ部分のテストコードは書かずに進めました。*1
気になるところをリファクタ
コメントを付けたり、テスト・スイートにまとめたり。
- リファクタ(30分)
課題4の仕様について
MyDataWriterの仕様が少し曖昧な気がする。
- MyDataWriter
初期状態が””(空)でない文字列に対してwriteDataメソッドを呼び出したときの仕様が不明確。
少なくとも、下記のパターンの仕様が欲しい。
- 初期状態が”test:value\n”である文字列に対してwriteData(“test”, “value”)した場合、文字列は○○に変更される
- 初期状態が”test:value\n”である文字列に対してwriteData(“sample”, “example”)した場合、文字列は○○に変更される
- 初期状態が”test:value\n”である文字列に対してwriteData(“”, “anydata”)またはwriteData(null, “anydata”)した場合、文字列は○○(のまま/に変更される)
それとも、ここまで考えずに最小限の仕様を満たせばOKという課題なのかな。
とりあえず、最小限のテストケースを通る物は作り終わった。
感想
やっぱりテストコードを書いた経験が少ないため、どのようにテストを書くべきか分からない所が多い。例えば、
- テストメソッドを増やすか?それともassertThatを増やすか?
- コメント、Javadocはどの程度書くのが良いのか?(どの程度時間を掛けるか?)
- 仕様にない部分(限界値、起こりうるException)をどの程度テストコードに書くのか?
たぶん経験によるものも多いだろうけど、機会があれば勉強会でも聞いてみたい。
*1:テストコードが書けなかったという理由もありますが。。。