Skip to content

コード整理しました - #5

Closed
kanapple wants to merge 1 commit into
baserproject:dev-2from
kanapple:dev-2
Closed

コード整理しました#5
kanapple wants to merge 1 commit into
baserproject:dev-2from
kanapple:dev-2

Conversation

@kanapple

Copy link
Copy Markdown
Contributor

No description provided.

@kanapple kanapple closed this Apr 28, 2012
nojimage added a commit to nojimage/basercms that referenced this pull request Nov 5, 2012
@ryuring ryuring added this to the etc milestone Aug 13, 2019
@momofff momofff modified the milestones: etc, close Aug 31, 2024
ryuring pushed a commit that referenced this pull request Sep 2, 2026
BlogPostsTableTest::testAllowPublish のデータプロバイダで
new \Cake\I18n\DateTime('+1 hour') により日時を生成していたため、
CI の Unit Test (8.2) で data set #2 #5 #6 #10 が失敗していた。

原因は2つが重なっている。

1. データプロバイダはテストスイート構築時に一度だけ評価されるため、そこで
   確定した「1時間後」は、テスト本体の実行までに1時間以上経過すると
   過去日時になる。当該ジョブは全体テストで2時間8分かかっていた。
2. tests/bootstrap.php の Chronos::setTestNow() により Chronos の現在日時は
   テスト起動時点で固定される。そのため `new DateTime('+1 hour')` のような
   相対指定は起動時点を基準に解釈される。一方 BlogPostsTable::allowPublish()
   は time() による実時間で比較するため、両者がズレる。

対応として、日時をデータプロバイダに持たせず、実時間を基準にテスト実行時点で
生成するよう変更した。あわせて各データセットに判定意図のコメントを追加し、
assertEquals の引数順が期待値・実測値で逆になっていた点も修正した。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
ryuring added a commit that referenced this pull request Sep 2, 2026
* fix: データプロバイダで日時を確定していた不安定なテストを修正

SearchIndexesTableTest::testAllowPublish と ContentsTableTest::testIsPublish で、
データプロバイダ内に date('Y-m-d H:i:s') で日時を生成していたため、
タイミングによってテストが失敗していた。

データプロバイダはテストスイート構築時に一度だけ評価されるため、そこで
「+1 hour」等の日時を確定させると、テスト本体が実行されるまでの経過時間が
1時間を超えた時点で未来日時が過去日時に変わり、判定結果が反転する。
全体テストのように実行時間の長いケースで発生していた。

また、公開開始日時に「現在時刻」を指定して公開中を期待していたケースは、
実装が publish_begin >= 現在日時 を未公開と判定するため、データプロバイダと
テスト本体が同一秒に実行されると失敗する状態だった。

対応として、日時をデータプロバイダに持たせず、テスト実行時点で生成するように
変更した。あわせて境界値ではなく前後1時間の値を用いることで、判定意図を
明確にしている。

- SearchIndexesTableTest: 相対指定を受け取りテスト本体で日時へ変換する方式に変更
- ContentsTableTest: 相対日時のケースを testIsPublishWithPublishPeriod へ分離
- assertEquals の引数順が期待値・実測値で逆になっていた点もあわせて修正

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* fix: FrozenTime::now() 基準の日時が実時間とズレる問題を修正

ContentsTableTest::testIsPublishWithPublishPeriod で FrozenTime::now() を
基準に日時を生成していたが、tests/bootstrap.php の Chronos::setTestNow() に
より FrozenTime の現在日時はテスト起動時点で固定される。

一方、判定対象の ContentsTable::isPublish() は date() による実時間で比較する
ため、テストスイートの実行が1時間を超えると FrozenTime::now()->addHours(1) が
実時間では過去となり、再び不安定になる状態だった。

FrozenTime も実時間から生成した日時文字列を基準とするよう変更し、文字列の
ケースと同じ基準時刻で評価されるようにした。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* fix: bc-blog の公開状態テストがタイミングによって失敗する問題を修正

BlogPostsTableTest::testAllowPublish のデータプロバイダで
new \Cake\I18n\DateTime('+1 hour') により日時を生成していたため、
CI の Unit Test (8.2) で data set #2 #5 #6 #10 が失敗していた。

原因は2つが重なっている。

1. データプロバイダはテストスイート構築時に一度だけ評価されるため、そこで
   確定した「1時間後」は、テスト本体の実行までに1時間以上経過すると
   過去日時になる。当該ジョブは全体テストで2時間8分かかっていた。
2. tests/bootstrap.php の Chronos::setTestNow() により Chronos の現在日時は
   テスト起動時点で固定される。そのため `new DateTime('+1 hour')` のような
   相対指定は起動時点を基準に解釈される。一方 BlogPostsTable::allowPublish()
   は time() による実時間で比較するため、両者がズレる。

対応として、日時をデータプロバイダに持たせず、実時間を基準にテスト実行時点で
生成するよう変更した。あわせて各データセットに判定意図のコメントを追加し、
assertEquals の引数順が期待値・実測値で逆になっていた点も修正した。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* fix: bc-uploader の公開状態テストの日時生成を実時間基準に変更

UploaderHelperTest::testIsPublish のデータプロバイダで
new FrozenTime('+1 day') により日時を生成していた。

BlogPostsTableTest と同じアンチパターンで、以下の2点により実時間とズレる。

- データプロバイダはテストスイート構築時に一度だけ評価されるため、そこで
  確定した相対日時はテスト本体の実行までの経過時間の影響を受ける
- tests/bootstrap.php の Chronos::setTestNow() により Chronos の現在日時は
  テスト起動時点で固定されるため、相対指定は起動時点を基準に解釈される。
  一方 UploaderHelper::isPublish() は date() による実時間で比較する

マージンが1日あるため実際の失敗は確認されていないが、同じ不具合の芽を残さない
よう、日時を実時間基準でテスト実行時点に生成する方式へ揃えた。

これにより、データプロバイダ内で日時を確定させる箇所はリポジトリから解消した。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants