名古屋で数学するプログラマ(仮)

@antimon2 が趣味兼一部本職の数学で何かするときのブログ。

日付型のユニットテスト(『CodeIQの問題・パズルを考えよう!』提案その4)

CodeIQの問題・パズルを考えよう!(by CodeIQ×はてな)』に #{"また"*3} 応募してみます。

今回は、提案と言うより相談です。TDD ネタです。

日付型のテスト…

ユニットテストで…

  • 実行環境のシステム日時に依存して結果が変わるメソッドをテストするには、どうすれば良いのでしょうか?
  • 実行環境のロケール(正確にはローカルタイムゾーン)に依存して結果が変わるメソッドをテストするには、どうすれば良いのでしょうか?


正直、私自身の中に明確な正解がありません(^-^;
本当に相談です。

システム日時の方は、setup フェーズでなんらかの日時固定処理とか日時取得外部メソッド準備とかそういうことをすれば良いのかな?とは思うのですけれど。
タイムゾーンの方は未解決です。Java などの TimeZone 型(クラス)が標準で存在する言語(処理系)はそれをうまく利用してなんとかなるかもですが、それを持たない(≒日付型(日時型)に「ローカル日時」(+「UTC 日時」のせいぜい 2 種類)の概念しかない)言語/処理系の場合は?

ま、先人たちが色々工夫して解決策を出しているはずなので、ググればそれが見付けられるかもしれません。
でもこれを CodeIQ の問題として出題すれば、その人がどれだけそういった修羅場をくぐり抜けているかを測る尺度にはなるかも*1

*1:またその解決方法を共有することも出来るのではないか、と(こっちが本音)