MySQL系アダプターのテスト実行時にAbstractMySQLのテストも自動収集するよう修正

rails/rails

MySQL系アダプター(mysql2trilogy)のテスト実行時に、abstract_mysql_adapter 配下のテストが自動的に収集されない問題が修正されました。これにより、共通の抽象層に対するテストが漏れなく実行されるようになります。

背景

Rails の ActiveRecord は、MySQL系データベースに対して AbstractMysqlAdapter という共通の抽象アダプターを持ちます。Mysql2AdapterTrilogyAdapter はいずれもこの抽象アダプターを継承しており、test/cases/adapters/abstract_mysql_adapter/ 配下にはその共通ロジックのテストが格納されています。

しかし、mysql2trilogy を対象にテストを実行する際、abstract_mysql_adapter 配下のテストは自動収集の対象外でした。各アダプター固有のテスト(test/cases/adapters/mysql2/ など)は収集されるものの、継承元の抽象クラスのテストは手動でパターン指定しない限り実行されていませんでした。

技術的な変更

activerecord/test/support/tools.rblist_tests メソッドが修正され、mysql2 または trilogy を対象にした場合に abstract_mysql_adapter 配下のテストも自動収集されるようになりました。

変更前:

def list_tests(patterns)
  tests = super
  tests.concat FileList["test/cases/adapters/#{adapter_name}/**/*_test.rb"] if patterns.empty?
  tests
end

変更後:

def list_tests(patterns)
  tests = super
  if patterns.empty?
    tests.concat FileList["test/cases/adapters/#{adapter_name}/**/*_test.rb"]
    case adapter_name
    when "mysql2", "trilogy"
      tests.concat(FileList["test/cases/adapters/abstract_mysql_adapter/**/*_test.rb"])
    end
  end
end

case 文で mysql2trilogy を明示的に列挙し、それぞれに対して abstract_mysql_adapter 配下のテストを追加収集するロジックが加えられています。patterns が空でない場合は if ブロックがスキップされ、tests 配列は変更されずにメソッドの処理を終えます。つまり、この変更の影響はテストパターンを明示しない通常の実行時に限定されます。

設計判断

この変更では、case 文を用いて対象アダプターを明示的に列挙する手法が採用されました。abstract_mysql_adapter のテストを追加収集する条件として、mysql2trilogy の2つのアダプター名がハードコードされています。他のアダプター(postgresqlsqlite3 など)に対しては追加収集は行われません。

まとめ

この修正により、MySQL系アダプターのテスト実行時に AbstractMysqlAdapter のテストが確実に含まれるようになります。テストの収集ロジックに継承関係を反映させることで、共通ロジックのデグレードを見逃すリスクが低減されます。

記事メタデータ

Generated by:
Claude Sonnet 4.6 for DiffDaily
LLM Trace:
8c0ac84e

この記事はAIによって自動生成されています。内容の正確性については、必ずソースコードやPRを確認してください。

品質レビュー結果

Review Status:
リトライ後承認
Review Count:
2回 (改善を経て承認)
Reviewed by:
Gemini 2.5 Pro for DiffDaily

Review Criteria:

記事構成 ✓ PASS

Title, Context, Technical Detailの存在と明確さ

リード文(総論)、背景・技術詳細(各論)、まとめ(結論)という「総論→各論→結論」の構成が明確に適用されており、ガイドラインに完全に準拠しています。

カスタムMarkdown構文 ✓ PASS

シンタックスハイライト・GitHubリンク記法の正確性

ファイル名付きシンタックスハイライト(```ruby:filepath)とPR番号のリンク記法([#57321](URL))が正しく使用されています。

対象読者への適合性 ✓ PASS

エンジニア向けの適切な技術レベルと表現

ActiveRecordのアダプターやテスト収集の仕組みといった専門的な内容を扱っており、対象読者であるエンジニアに適した技術レベルです。

パラグラフ・ライティング ✓ PASS

トピックセンテンス・1段落1トピック・段落長

各セクションが総論→各論の構成になっており、各段落はトピックセンテンスで始まり、1段落1トピックの原則が守られています。段落の長さも適切で、非常に読みやすいです。

Diff内容との照合 ✓ PASS

コードブロックとDiff内容の一致

記事内のコードブロックは、提供されたDiffの内容を正確に反映しています。ファイルパスも正確です。

技術用語の正確性 ✓ PASS

技術用語の正確な使用

`AbstractMysqlAdapter`, `TrilogyAdapter`などの技術用語が正確かつ適切な文脈で使用されています。

説明の技術的正確性 ✓ PASS

技術的主張の正確性と論理性

コード変更に関する説明(`case`文による条件分岐、`patterns`が空の場合に限定される影響範囲など)は、技術的に正確で論理的です。

事実の突合 ⚠ WARNING

PR情報による主張の裏付け(ハルシネーション検出)

背景セクションで`Mysql2Adapter`等が`AbstractMysqlAdapter`を継承していると説明していますが、この事実はPR情報(タイトル、Diff)に明記されていません。ただし、PRの意図を理解する上で不可欠な前提知識であり、PRタイトルから強く示唆される内容であるため、許容範囲と判断します。

数値・固有名詞の確認 ✓ PASS

PR番号・コミットID・バージョン等の正確性

PR番号(#57321)が正確に記載・リンクされています。

タイトル・説明との一致 ✓ PASS

記事タイトル・説明とPR内容の一致

記事のタイトルは、元のPRタイトル「Fix running AbstractMySQL tests when testing Trilogy and Mysql2」の内容を的確に要約しています。

外部知識の正確性 ✓ PASS

PRに記載のない外部知識(LTS、サポート状況など)の不使用

バージョンサポート状況やリリース日程など、PR情報に基づかない外部知識は含まれていません。

時間表現の正確性 ✓ PASS

時間表現がPR情報と一致しているか

完了した変更に対して「修正されました」といった過去形の表現が使われており、時間表現は正確です。