データベースを利用したシステムのユニットテストについての質問です。

環境はPHP + MySQL + SimpleTestですが、汎用的な回答であれば特に言語にこだわる必要はありません。

【データベース】
日時カラム(datetime型)を持つテーブルがあります。

【テストしたいメソッド】
”メソッドの実行時”に、上記のカラムに”現在日時に一定の秒数を足した日時”を入れてその他のカラムとともに更新します。
(足される秒数はレコードごとに異なり、これは他のメソッドからメンバ変数にセットしています。)
更新に成功すればtrue、失敗すればfalseを返します。

現在は、メソッドの呼び出し後=レコード更新後にそのレコードを取得し、あらかじめ用意した期待する結果と比較してテストしています。
ただ、上記の日時カラムについては、カラムに入る値がメソッドを呼び出すまで特定できないため、比較によるテストができません。
このようなメソッドをテストする場合、どうするのがよいでしょうか?みなさん、どうしてますか?

目視で確認?
日付カラムは無視する?
メソッドをオーバーライド?
そもそも、戻り値のテストだけすればよい?

よろしくお願いします。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2010/06/19 17:20:07
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答3件)

id:koriki-kozou No.1

回答回数480ベストアンサー獲得回数79

ポイント35pt

>他のメソッドからメンバ変数にセット

ユニットテストだからユニットそのものには手を加えるわけにいかないし、「他のメソッド」をオーバーライド(実際にはテスト用に別途用意)だね

「他のメソッド」は上限値か下限値のいずれかをセットするようにして常に一定の値を返すようにしておいてもいいと思うし、自動的定期的に変わるようにしてみてもいいけど、そこまでするかどうかはケースバイケースだよね

id:zaxaxaz

回答ありがとうございます。

「他のメソッド」でセットする値を固定しておけば、テストが簡単になりそうですね。

結合テストの場合は自動テストが難しそうですが、

この場合も「テストしたいメソッド」「他のメソッド」を別に用意して、「固定の日時+固定の秒数」で更新するようにするとかでよさそうですね。

2010/06/12 23:41:47
id:hanako393 No.2

回答回数1142ベストアンサー獲得回数87

ポイント35pt

>そもそも、戻り値のテストだけすればよい?

これです。

DB格納に関しては、別のテストを実施されてるか、実施してたらOKです。

>上記の日時カラムについては、カラムに入る値がメソッドを呼び出すまで特定できないため、比較によるテストができません。

このテスト方法でテストする項目ではそもそもありません。

id:zaxaxaz

たしかに、一度にまとめてテストしすぎかもですね。

テストの仕方を見直してみようと思います。

2010/06/13 12:09:28

質問者が未読の回答一覧

 回答者回答受取ベストアンサー回答時間
1 小力子象 78 51 2 2010-06-12 22:52:48

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません