🎮 ゲーム内テスト
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 件です。
stamp-thinking-face— Alice が/st :thinking-face:を実行します。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 は、次のジョブで構成されています。
| ジョブ | 内容 |
|---|---|
versions | morinoparty/fukurou/versions で、テストするバージョンの一覧を決めます(既定は 1.21.6-)。 |
build | プラグインを1回だけビルドします。 |
test | バージョンごとに morinoparty/fukurou でスイート全体を 1 つのサーバーセッションで実行します。ProtocolLib も一緒に導入します。 |
deploy | morinoparty/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 に同意したことになります。