最終確認日

Godotで単体テストをしてみたい

背景

オンラインゲームの仕組みの本ー第6章をGodotに置き換えながら読む」で、叩いて被ってじゃんけんポンを作っているが、その結果がおかしい場合がある。

通信機能が邪魔しているのか関数自体が間違えているのかの判定をしたい。バグを追っていてもいいが、これこそユニットテストの出番でしょ!ってことで、初めてのGodotでのユニットテストをやってみる。

ドキュメント

公式ドキュメントには、特にエンジン側のテストの話はあるがゲーム制作中のテストについては特に書いていない。

プロジェクトをのぞいてみる

以前、Godotのディレクトリ構造を調査した時に覗いたプロジェクトを見てみる。

GDQuestのlearn-gdscriptプロジェクトをのぞいてみよう 」よりGDQuest/learn-gdscript のテストについて

  • addons フォルダに gut があることを確認
  • res://gut/integration/test_course.gd がある
  • res://tests というフォルダもあるが、そっちは extends EditorScript となっている。
    • これは Godot のエディタ内部のエラーメッセージデータベースの検証テスト

Godotのプロジェクト「OpenRTS」の中身をのぞいてみよう よりlampe-games/godot-open-rtsのテストについて

  • tests/manual フォルダがある
    • 中身は全て .tscnである。
    • これは手動動作での確認用のテストマップっぽい?
    • なのでユニットテストではなさそう。

GDQuestはいいぞと思っているので、倣ってGUTを使ってみる。

GUTをつかう

Quick StartよりGUTをインストールして使ってみる。

1. アドオンとして追加

  • AssetLib ボタンからGUTを検索する

    • AssetLib ボタンがない場合
    • Editor > Manage Export Templates... より
    • Godotで単体テストをしてみたい-1751826572108
    • Asset Library をオンにする
    • Godotで単体テストをしてみたい-1751826666339
  • GUTをダウンロードする

    • Godotで単体テストをしてみたい-1751826709138
    • addons ディレクトリにインストールする。
    • プロジェクトツリーで res://addons/gut があればおk

2. プラグインを有効化する

  • Project > Project Settings よりプラグインを有効化する
    • Plugins > Gut > Enabled を On にする。
    • Godotで単体テストをしてみたい-1751826939163
    • エディタに GUT タブができていれば有効化できているよ
    • Godotで単体テストをしてみたい-1751827002715

3. テストコードのためのディレクトリを用意する

  • テストに関するコードを配置するためのディレクトリを用意する
  • GUTのドキュメントでは次の名前をオススメしている
    • res://test
    • res://test/unit
    • res://test/integration
  • 先ほど見たGDQuestでは res://gut/integration だった。
  • res://tests/unit にしようかな。

4. 作ったディレクトリをテスト対象とする

  • GUTパネルから3で作ったディレクトリを設定する
    • GUTタブを選択後に右側の設定パネルから Test Directories を探し、Include Subdirs にチェックを入れる。
    • 0番目に res://tests/unit を設定する
    • Godotで単体テストをしてみたい-1751827783713

5. テストサンプルを作ってみる

  • res://tests/unit/test_example.gd を作る
  • テストを作る時は test_ をつけることでGUTに認識してもらえる。
    • これはGUTパネルから変更もできる(misc のところ)
test_example.gd
extends GutTest

func test_passes():
    # this test will pass because 1 does equal 1
    assert_eq(1, 1)

func test_fails():
    # this test will fail because those strings are not equal
    assert_eq('hello', 'goodbye')

6.テストを実行する

  • GUTパネルを選択して Run All をクリックする
    • なんか実行された
    • Godotで単体テストをしてみたい-1751828011592
    • GUTパネルの右側の設定パネルからこの表記も変えられるっぽくはある。
  • GUTパネルでもテスト結果が表示される
    • Passing にチェックを入れることで、成功したテストケースも表示することができる。
    • Godotで単体テストをしてみたい-1751827963076

まとめ

テストの詳しい書き方は「Creating Tests - Gut Docs」に書いてある。

とりあえず自分のやりたいことはできそうな雰囲気なので、今回のノートではここまで。

サイトアイコン
公開日
更新日