プロダクションコード側で、new DateTime()
の代わりに Chronos
を使って日付を生成すると、テストの中で、 Chronos::setTestNow('2020-03-21');
を使って、テストの現在日時を設定できると教えてもらいました。これは便利!
例:
- プロダクションコード
function isInPeriod(){
// 期間内判定
return Chronos::now()->between(
Chronos::parse(START_DATE),
Chronos::parse(END_DATE),
true
);
}
- テストコード
public function testIsInPeriod($testName, $testInput, $runOption, $expectedResult)
{
// 現在日時をテストケースに合わせて変更
Chronos::setTestNow('2024-12-20 08:59:59');
// テスト実行
// テスト結果検証
}
余談
Chronosには、日付比較や日付の差分を求めるメソッドも色々あるようです。言語によって日付の計算は面倒な時があるので、助かります。