ユニットテストの日付操作クラスの現在の時刻(つまり、時間()の出力)をPHPで変更するにはどうすればよいですか?ユニットテストの日付関数の現在時刻をPHPで変更する方法
答えて
をtime()
の依存関係を削除する必要があるように私の推測では、あなたの依存関係で苦労されていますね。単体テストでは、あなたの時間を提供するメソッド/クラスの出力を確実に制御したいのですが、クラス内でtime()関数を使用しているようです。私はあなたの時間を提供し、あなたの単体テストに模擬したTimeクラスを作成すると言うでしょう。
私は最近、PHP 5.3の名前空間を使用している場合に最適なソリューションを考え出しました。現在の名前空間内に新しいtime()関数を実装し、テストで戻り値を設定する共有リソースを作成することができます。その後、time()への不適格な呼び出しでは、新しい関数が使用されます。さらに読書のために
私はあなたがインターフェイスベースの継承モデル検討するかもしれない私のblog
私は最近、 'time()'のような非決定的なPHP関数をモックするためにその言語機能を使用するライブラリ[php-mock](https://github.com/malkusch/php-mock)を実装しました。 –
で詳細にそれを説明:現在の時間で作業する必要が独自のクラスを取るだろう
interface iClock
{
public function getTime();
}
class SystemClock implements iClock
{
public function getTime()
{
return time();
}
}
class FakeClock implements iClock
{
private $time;
function __construct($time)
{
$this->time = $time;
}
public function getTime()
{
return $this->time;
}
// you could have more functions to advance the time, etc.
}
をiClock
インターフェイスタイプのコンストラクタパラメータ
class YourOwnClass
{
private $clock;
function __construct(iClock $clock)
{
$this->clock = $clock;
}
function someFunction()
{
$now = $this->clock->getTime();
// whatever
return $now;
}
}
その後、あなたは、単に時計の種類を注入でしょう、あなたはユニットテストにあったかどうかに応じて、望んでいた:
$realWorldInstance = new YourOwnClass(new SystemClock());
echo $realWorldInstance->someFunction();
$unitTestInstance = new YourOwnClass(new FakeClock(1234));
echo $unitTestInstance->someFunction();
をところで - 私は、多くの場合、このパターンを使用します.NETでも同様です。 Noda Timeによって提供されるIClock
インターフェイスにも組み込まれています。このパターンがPHPではうまくいかない理由はありません。整数のタイムスタンプではなく、DateTime
を返すこともできますが、上記はパターンを使用するために必要な最小値です。
- 1. vbの現在の日付時刻の更新方法は?
- 2. Jqueryの現在の日付と時刻をチェックする方法
- 3. PHPで現在の日付と時刻を取得する方法
- 4. ワールドワイド現在の日付と時刻を取得する方法
- 5. 今日のテキストファイルで日付時刻を変更する方法
- 6. 日付+時刻と現在の日付と時刻を比較するには?
- 7. 新しい日付時刻ですが現在の時刻は
- 8. ETの現在の日付/時刻
- 9. Cordova:Androidデバイスの現在の日付/時刻
- 10. Erlangと現在の日付時刻
- 11. は、現在の日付時刻に
- 12. JQuery + Daterangepicker - 現在の日付と時刻?
- 13. 現在の日付と時刻VBA
- 14. 変更色現在の日付PHP
- 15. PHPの日付オブジェクトとして現在の日付/時刻を取得する方法
- 16. PHP/MySQLのクエリ - 現在の時刻/日付がスケジュール
- 17. 現在の時刻とMySQLの時刻変数を比較する方法
- 18. ファイル名を現在の日付と時刻に変更するバッチバッチ
- 19. SQLの時刻と現在の日付と時刻をTSで比較する
- 20. MongoDBの現在の日付と時刻の更新
- 21. jmeter-現在の日付と時刻を秒単位で取得する方法
- 22. Yahoo Pipesで現在の日付と時刻を取得する方法は?
- 23. jaggery jsで現在の日付と時刻を取得する方法は?
- 24. 日付/時刻がPHPに変わるのを防ぐ方法
- 25. は、私は現在、PHPはそうのような現在の時刻/日付を取得した日付
- 26. purescriptで現在の時刻/日付を取得する
- 27. 現在のutc日付時刻の既定の日付時間オフセット列を作成する方法
- 28. 値リストフィールドの現在の時刻を現在の日付に設定された日付に変更する方法
- 29. SSISが取る-1時間を現在の日付と時刻
- 30. データウェイブで現在の日付と時刻を見つける方法は?
http://stackoverflow.com/questions/530649/is-it-possible-to-replace-monkeypatch-php-functions –
いくつかのコードを表示できますか?私の意見では、単体テストのために 'time()'をオーバーライドする必要がある場合、*テストやコードに何らかの問題があるかもしれません。 – netcoder
クラスは現在の日付を操作します。私はちょうどすべての日付のすべてのメソッドの単語を正しく確認したい。 – happytoad