Chat (Lingr.com)
Informaiton
Daily
Column
- MySQL日本語の旅(5/1)
- アクセス向上秘伝(5/9)
- 一風変ったHaskellλ門(6/13)
- SICP Answer Book (5/31) 問題3.26追加
Zope Solution
Extra
アーカイブ
OSS案内所
Site Info
関連リンク
(今日の打ち合わせはスムーズだったな。いつもこの調子だといい んだけどね。。)
森川は、客先の打ち合わせを終えて帰社し、行き先掲示板を 「在室」に変更して自席に戻った。 鞄からノートPCを取り出して電源を入れ、OSの起動を待つ。
ふと、気がつくと隣の内村が腕組みして画面を見つめ、何か考えて いるようだった。
「内村、難しい顔してどうしたんだい?」
深刻にならないように、明るい調子でさぐりを入れる。
「あぁ、森川さん、おかえりなさい。 いえ、ちょっとユニット・テストをどうしようかと思って。。」
「どれどれ。。」
少し自信なさげな様子の内村を見て、状況を確認してみることに し、内村の説明を聞く。
「ログイン処理がほぼ完了なので、次のログイン履歴のロギング 部分を作っているんですが、ユニット・テストをどう作ればいい のか分からなくて悩んでいます。これってファイルに出力した内 容を読み出すんでしょうか。。」
ログイン履歴機能は、ログイン日時とアカウントなどの情報を記 録して、システムの利用状況を把握できるようにするため、顧客 から要望が上がっていたものだ。
仕様では、
1.ファイル名は「accessYYYYMMDD.log」として、日毎のファイ
ルを生成する。(YYYYは年、MMは月、DDは日を表す)
2.出力内容は日時、およびアカウント情報を CSV形式で出力する
(YYYY/MM/DD-hh:mm:ss username,...)
となっている。
「なるほどね。ファイルから読み出すとすると。。最後のエントリ を読み出して、出力内容の確認をすればいいのか。確かにユニット・ テストは少し複雑になりそうだね。」
「そうなんですよ。ファイルも実際に作成されるんですよね。。」
「テストが複雑になるときは、一度に複数のテストをしようとして いないか疑ってみるといいよ。」
「え?でも、ログイン履歴の出力だけのテストですよ。」
「いや、そうじゃないんだ。ログイン履歴の出力はひとつの機能だ けど、確認ポイントは複数あるよね。例えば、ファイル名が正し いか、出力内容が正しいか、そしてファイルに正しく出力される かの3点考えられる。」
「。。。」
「今あるログイン履歴の出力メソッドを、こんな感じで分けてみよ う。」
[AccessLog]
public void write(String login) {
// ログイン履歴の出力先ファイル名
String filename = this.getLogName();
// 履歴の出力内容
String line = this.getLogLine(login);
try {
BufferedWriter writer
= new BufferedWriter(new FileWriter(filename));
writer.write(line, 0, line.length());
writer.newLine();
} catch (Exception e) {
;
}
}
public String getLogName() {
:
}
public String getLogLine(String login) {
:
}
「getLogName()、getLogLine()のテストメソッドで、それぞれファ イル名、出力内容の正当性が確認できるようになる。ファイルに出 力できるかは単純なコードだから、一度動くことを確認しておけば、 毎回確認しなくてもまぁいいかな。」
「確かにファイル名と出力内容は、別々にテストできるようにして テストが書きやすくなるのは分かりましたが。。 getLogName()、getLogLine()が public になっています。これは private メソッドにすべきではないんですか?」
「そうだなぁ、普通なら2つのメソッドは private にするかもね。 ただし、ここではテストしやすくなることに重点を置いてるんだ。 それに getter メソッドだから公開メソッドにしても、カプセル化 は壊れないしね。 どうしても気になるなら、パッケージ・プライベートなメソッドに して、テストクラスを同じパッケージに作成してもいいかな」
テスト駆動開発では、従来の設計とは違ってテストが作成しやすい ように設計することがよいとされている。
森川のアドバイスを受け、内村は再びコードを入力し始めた。。
前回:こっそりコード共有 次回:リファクタリングは順番が大事
There is no comment.