MineStamp

🎮 ゲーム内テスト

fukurou を使い、実際のサーバーとクライアントでスタンプの見た目を確認するテスト

🧭 概要

MineStamp のゲーム内テストは、fukurou を使って実行します。fukurou は、実際の Paper サーバーと、プレイヤーごとのバニラ Minecraft クライアントを起動し、JSON のシナリオどおりに操作してスクリーンショットを保存します。 1 バージョンにつきサーバーは 1 回だけ起動し、そのセッションの中でテストを順番に実行します。GitHub Actions ではプルリクエストごとに実行され、全バージョンの結果をまとめたビューアへのリンクが PR にコメントされます。

📝 スイートとシナリオ

MineStamp のゲーム内テストは、1 つのスイートファイル game-test/fukurou.yml と、game-test/scenarios/ に置かれた複数のテストで構成されています。スイートは全テストで共有する内容(プレイヤー、リセット設定、fixture)を持ち、シナリオ 1 ファイルがテスト 1 件に対応します。テストの間はハーネスがワールドとクライアントをリセットします。

fukurou.yml は次の 2 つの fixture を定義しています。

  • arena — Alice と Bob が向かい合う石の柱を作り、それぞれの上に転送します。
  • front-view — Alice の視点を F5 を2回押して正面から見た視点にします。fukurou はテストの前に自動で一人称へ戻します。

テストは次の 2 件です。

  1. stamp-thinking-face — Alice が /st :thinking-face: を実行します。
  2. stamp-sleeping-face — Alice が /st :sleeping-face: を実行します。

どちらのテストも、コマンドがサーバーに届いたログを確認したあと 1.5 秒待ち、"on": ["Alice", "Bob"] で両プレイヤーが同時にスクリーンショットを撮ります。スタンプは 3 秒間表示されるので、1.5 秒待ってからならまだ画面に残っています。MineStamp のスタンプのクールダウンは表示 3 秒 + waitSecond 5 秒 で 8 秒です。前のテストのスクリーンショット前の待機(1.5 秒)と、リセット後の待機(settle: 5 秒)、fixture の待機(2 秒)を合わせると 8.5 秒以上になり、次のテストのスタンプ送信までにクールダウンが明けています。

スイートとシナリオの書き方は、fukurou の README を参照してください。手元でスイート全体を検証するには、次のコマンドを実行します。

uvx --from git+https://github.com/morinoparty/fukurou@v2 fukurou validate --suite game-test/fukurou.yml

⚙️ ワークフロー

.github/workflows/game_test.yml は、次のジョブで構成されています。

ジョブ内容
versionsmorinoparty/fukurou/versions で、テストするバージョンの一覧を決めます(既定は 1.21.6-)。
buildプラグインを1回だけビルドします。
testバージョンごとに morinoparty/fukurou でスイート全体を 1 つのサーバーセッションで実行します。ProtocolLib も一緒に導入します。
deploymorinoparty/fukurou/ui で全バージョンの結果をまとめたビューアを作り、S3 にアップロードします。
previewテストの件数(例: "14 passed of 14 test runs")とビューアへのリンクを PR にコメントします。

MineStamp は Java 25 のバイトコードでビルドされており、Paper 1.21.4 以前では読み込めない(Unsupported class file major version 69)ため、既定の範囲は 1.21.6 以降にしています。Game test ワークフローを手動で実行するときは、バージョンの範囲と、実行するテストの id / タグを選べます。

テストを実行すると Minecraft のサーバーとクライアントを起動するため、Minecraft EULA に同意したことになります。

On this page