環境はPHP + MySQL + SimpleTestですが、汎用的な回答であれば特に言語にこだわる必要はありません。
【データベース】
日時カラム(datetime型)を持つテーブルがあります。
【テストしたいメソッド】
”メソッドの実行時”に、上記のカラムに”現在日時に一定の秒数を足した日時”を入れてその他のカラムとともに更新します。
(足される秒数はレコードごとに異なり、これは他のメソッドからメンバ変数にセットしています。)
更新に成功すればtrue、失敗すればfalseを返します。
現在は、メソッドの呼び出し後=レコード更新後にそのレコードを取得し、あらかじめ用意した期待する結果と比較してテストしています。
ただ、上記の日時カラムについては、カラムに入る値がメソッドを呼び出すまで特定できないため、比較によるテストができません。
このようなメソッドをテストする場合、どうするのがよいでしょうか?みなさん、どうしてますか?
目視で確認?
日付カラムは無視する?
メソッドをオーバーライド?
そもそも、戻り値のテストだけすればよい?
よろしくお願いします。
>他のメソッドからメンバ変数にセット
ユニットテストだからユニットそのものには手を加えるわけにいかないし、「他のメソッド」をオーバーライド(実際にはテスト用に別途用意)だね
「他のメソッド」は上限値か下限値のいずれかをセットするようにして常に一定の値を返すようにしておいてもいいと思うし、自動的定期的に変わるようにしてみてもいいけど、そこまでするかどうかはケースバイケースだよね
>そもそも、戻り値のテストだけすればよい?
これです。
DB格納に関しては、別のテストを実施されてるか、実施してたらOKです。
>上記の日時カラムについては、カラムに入る値がメソッドを呼び出すまで特定できないため、比較によるテストができません。
このテスト方法でテストする項目ではそもそもありません。
たしかに、一度にまとめてテストしすぎかもですね。
テストの仕方を見直してみようと思います。
回答者 | 回答 | 受取 | ベストアンサー | 回答時間 | |
---|---|---|---|---|---|
1 | 小力子象 | 78回 | 51回 | 2回 | 2010-06-12 22:52:48 |
回答ありがとうございます。
「他のメソッド」でセットする値を固定しておけば、テストが簡単になりそうですね。
結合テストの場合は自動テストが難しそうですが、
この場合も「テストしたいメソッド」「他のメソッド」を別に用意して、「固定の日時+固定の秒数」で更新するようにするとかでよさそうですね。