Minitest 6 と minitest-mock を導入してテスト環境を更新
Minitest を 6.0.6 に固定し、minitest-mock を追加することで、テストスイートが最新の Minitest 機能とモックサポートを利用できるようになりました。
背景
Minitest のバージョン上限が曖昧だった ため、CI 環境や開発者マシンで使用される実際のバージョンが統一されていませんでした。従来の gem "minitest", "< 7" という指定は、将来的な互換性は保ちつつも具体的なバージョンが決まらないため、ビルドの再現性に課題がありました。この PR は、テストフレームワークを Minitest 6 系 に固定し、モック機能を提供する minitest-mock を導入することで、テストの信頼性と一貫性を向上させることを目的としています。
技術的な変更
Gemfile のバージョン指定を更新 し、minitest を 6.0.6 に固定、minitest-mock (5.27.0) を新規追加しました。
@@ -9,7 +9,8 @@ gem "rails", github: "rails/rails", branch: "main"
group :development, :test do
gem "appraisal", "2.5.0", require: false
gem "debug", "1.11.1"
- gem "minitest", "< 7"
+ gem "minitest", "6.0.6"
+ gem "minitest-mock", "5.27.0"
gem "minitest-parallel_fork", "2.1.1", require: false
gem "sqlite3", "2.9.4"
end
Gemfile.lock でも同様にロック が追加され、minitest (6.0.6) と minitest-mock (5.27.0) が依存ツリーに明示されます。
@@ -183,6 +183,7 @@ GEM
minitest (6.0.6)
drb (~> 2.0)
prism (~> 1.5)
+ minitest-mock (5.27.0)
minitest-parallel_fork (2.1.1)
minitest (>= 5.15.0)
@@ -357,7 +358,8 @@ DEPENDENCIES
debug (= 1.11.1)
importmap-rails
jbuilder
- minitest (< 7)
+ minitest (= 6.0.6)
+ minitest-mock (= 5.27.0)
minitest-parallel_fork (= 2.1.1)
propshaft
puma (>= 5.0)
gemfiles/rails_8_1.gemfile と gemfiles/rails_edge.gemfile でも同様に バージョン更新と minitest-mock の追加 が反映され、併せて RuboCop のバージョンが rubocop-minitest 0.39.1、rubocop-rails 2.35.3 に更新されています。
@@ -18,17 +18,18 @@ gem "turbo-rails"
group :development, :test do
gem "appraisal", "2.5.0", require: false
- gem "sqlite3", "2.7.4"
- gem "debug", "1.11.0"
- gem "minitest", "< 6"
- gem "minitest-parallel_fork", "2.1.0", require: false
+ gem "debug", "1.11.1"
+ gem "minitest", "6.0.6"
+ gem "minitest-mock", "5.27.0"
+ gem "minitest-parallel_fork", "2.1.1", require: false
+ gem "sqlite3", "2.9.4"
end
group :rubocop do
- gem "rubocop-minitest", "0.38.2", require: false
+ gem "rubocop-minitest", "0.39.1", require: false
gem "rubocop-packaging", "0.6.0", require: false
gem "rubocop-performance", "1.26.1", require: false
- gem "rubocop-rails", "2.33.4", require: false
+ gem "rubocop-rails", "2.35.3", require: false
gem "rubocop-rake", "0.7.1", require: false
end
設計判断
バージョン範囲指定から固定指定へ移行 したことは、テスト実行環境の再現性を高める意図が読み取れます。< 7 や < 6 のような緩やかな指定は、依存解決時に予期せぬ最新版が導入されるリスクを孕んでいます。明示的に 6.0.6 とロックすることで、ライブラリ間の互換性が保証され、CI の結果が安定します。
minitest-mock の追加 は、Minitest 6 の標準機能だけでは提供できない高度なスタブ/モック機構を補完する選択です。公式の minitest パッケージはシンプルなアサーションに特化しているため、外部依存をモックしたいテストケースで minitest-mock が有用です。これにより、テストコードが 外部サービスやデータベース呼び出しを安全に置き換える ことが可能になります。
Rubocop バージョンの同時更新 は、コード品質ツールの整合性を保つための副次的な判断です。rubocop-minitest と rubocop-rails を最新にすることで、Minitest 6 の構文チェックや新しい Rails スタイルガイドに対応できます。依存関係の統一的なアップデートは、メンテナンスコストの削減につながります。
まとめ
この PR は、Minitest を 6.0.6 に固定し、minitest-mock を導入 することで、テスト環境の再現性とモックサポートを向上させました。併せて RuboCop のバージョンも更新し、コード品質チェックの一貫性を確保しています。結果として、CI 上で一貫したテスト実行が保証され、開発者は最新の Minitest 機能とモックライブラリを安心して利用できるようになります。