無料・軽快な 2D / 3D 用のゲームエンジン Godot Engine 4 で、GD スクリプトで作成した機能のユニットテストをする際に便利な無料アセット GUT で、ユニットテストを行った結果に Orphans と黄色い文字で警告が表示された際の対処法を紹介します。
※ 3.x 系で 4.x 系が用意されていて 4.2 と書かれているので公式なサポートではないかもしれませんが 4.3 でも動作しました。
※ GodotEngine 4.3 を使用しています。.NET 版ではありません。
※ GUT アセットのバージョンは 9.3.0 です。
※スクリプトは自己責任でご使用ください。
前回の記事
前回は、GUT で、ユニットテストを行う前後に呼び出すイベント関数 before_each(), after_each() を用いて、テストの共通処理を定義して単体テストを実行しました。
動的に生成したオブジェクトは破棄する必要があります
GUT の公式ドキュメントによると、 Orphans はテストを行った関数内で、動的に確保 (new) したノードが解放 (free) されていないなどのメモリリークを検出した際に表示される警告文です。
GUT can display when your program or test generates orphaned nodes. This can be very helpful when tracking down memory leaks in your application. Note that GUT has no way to know if it was your program or your test that created the orphans.
GUT は、プログラムまたはテストで孤立したノードが生成されたときに表示されることがあります。これは、アプリケーションのメモリ リークを追跡するときに非常に役立ちます。 GUT には、孤立を作成したのがプログラムなのかテストなのかを知る方法がないことに注意してください。Orphans — GUT 9.3.0 documentation #orphans と Google 翻訳
Orphans 警告文が出た際の対処例
テスト自体は合格でも、黄色い警告文で Orphans と書かれている場合は、テスト関数内で動的に生成したオブジェクトを解放していないためにメモリリークが発生した可能性が考えられます。
res://test/unit/test_sakuracrowd_util.gd
* test_to_cell_pos_ceil_1
[Orphans]: 1 new orphan in test.
* test_to_cell_pos_ceil_2
[Orphans]: 1 new orphan in test.
* test_to_cell_pos_ceil_3
[Orphans]: 1 new orphan in test.
[Orphans]: 3 new orphans in script.
3/3 passed.
==============================================
= Run Summary
==============================================
---- Totals ----
Scripts 1
Tests 3
Passing 3
Asserts 3
Time 0.023s
[Orphans]: Total orphans in run 3
Note: This count does not include GUT objects that will be freed upon exit.
It also does not include any orphans created by global scripts
loaded before tests were ran.
Total orphans = 4
Ran Scripts matching "test_sakuracrowd_util.gd"
---- All tests passed! ----
new() により動的に生成したノードを確認して、きちんと free() で解放しているかを確認しましょう。
# テスト対象関数の TileMapLayer 型の引数の作成
var tilemap_layer = TileMapLayer.new() # オブジェクトを生成します。
# 動的に生成した TileMapLayer オブジェクトを破棄します。
tilemap_layer.free()
動的に生成したノードを free() で解放する処理などを追加して、メモリリークが解消されると、テスト実行時に Orphans の警告文が表示されなくなります。
まとめ
今回は、無料・軽快な 2D / 3D 用のゲームエンジン Godot Engine 4 で、GD スクリプトで作成した機能のユニットテストをする際に便利な無料アセット GUT で、ユニットテストを行った結果に Orphans と黄色い文字で警告が表示された際の対処法を紹介しました。
参照サイト Thank You!
- Godot Engine – Free and open source 2D and 3D game engine
- GUT – Godot Unit Testing (Godot 4) – Godot Asset Library
- Gut 9.3.0 (Godot 4.2) — GUT 9.3.0 documentation
- Quick Start — GUT 9.3.0 documentation
- GUT を使用した Godot でのテスト駆動開発 (チュートリアル) – YouTube
- Orphans — GUT 9.3.0 documentation #orphans
記事一覧 → Compota-Soft-Press
コメント