Godot4 GUTのユニットテストでOrphansと警告が出た場合の対処法

無料・軽快な 2D / 3D 用のゲームエンジン Godot Engine 4 で、GD スクリプトで作成した機能のユニットテストをする際に便利な無料アセット GUT で、ユニットテストを行った結果に Orphans と黄色い文字で警告が表示された際の対処法を紹介します。
※ 3.x 系で 4.x 系が用意されていて 4.2 と書かれているので公式なサポートではないかもしれませんが 4.3 でも動作しました。

Godot4 ユニットテスト用アセットGUTのGodotAssetLibraryのページの一部20241124

※ 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 と書かれている場合は、テスト関数内で動的に生成したオブジェクトを解放していないためにメモリリークが発生した可能性が考えられます。

Godot4 GUT ユニットテストでオブジェクトの解放処理が行われなかった場合に表示された 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 の警告文が表示されなくなります

Godot4 GUT ユニットテストでオブジェクトの解放処理が行われなかった場合に表示された Orphans 警告文の対処後.

まとめ

今回は、無料・軽快な 2D / 3D 用のゲームエンジン Godot Engine 4 で、GD スクリプトで作成した機能のユニットテストをする際に便利な無料アセット GUT で、ユニットテストを行った結果に Orphans と黄色い文字で警告が表示された際の対処法を紹介しました。

参照サイト Thank You!

記事一覧 → Compota-Soft-Press

コメント

Ads Blocker Image Powered by Code Help Pro

お願い - Ads Blocker Detected

このサイトは広告を掲載して運営しています。

ポップアップを閉じて閲覧できますが、よろしければ

このサイト内の広告を非表示にする拡張機能をオフにしていただけませんか?

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

We have detected that you are using extensions to block ads. Please support us by disabling these ads blocker.

タイトルとURLをコピーしました