UnrealEngine4(以下UE4)のドキュメントにはオリジナルのテストはC++で書くように書いてあるが実はBlueprint(以下BP)でも書くことができる。やり方を簡単に紹介。
TL;DR
-
FunctionalTest
クラスを継承したBPクラスを作成してテストのBPノードを書く - テスト対象のレベルに上記BPを配置、StandAloneでPlayできるようにしておく
- SessionFrontEndで複数のテストやテスト回数をグラフィカルにチェック
環境
4.14以降?ここでは4.15で説明。
やりかた
①FunctionalTest
の子クラス作成
まずはテストを書くBPクラスを作成する。親クラスはFunctionalTest
を指定。
②テストのBPノードグラフを書く
とりあえずサンプルとしてランダムに0~10の数字を返し、5以上なら成功、未満なら失敗という簡単なユニットテストのようなノードを書いてみる。
なお実際のユニットテストとしてならBPの関数などを呼び出す形になるだろう。
以下、重要なノードの説明。
Event Start Test
イベントノード
ここからテストの処理が開始する。最終的にFinish Test
ノードで終わらないとテストが完了せずにタイムアウトになるので注意。
Finish Test
ノード
テスト結果を通知して終了するノード。 テストを書くときに一番大事なノード。 失敗時にMessageLogに出力するメッセージの設定なども設定できる。
Test Result入力ピンのSucceeded
, Failed
あたりはよく使うことになるはず。
Event Prepare Test
イベントノード
テスト開始前に呼ばれるイベントノード。テスト前にやっておきたい処理を書いておく。
Set Time Limit
ノード
タイムアウトになるまでの時間や、タイムアウトを何とみなすかの設定をするノード。これがなくてもタイムアウトで失敗になる。
③BPをテスト対象のレベルに配置
レベルに配置すると、専用の3D Widget付きで表示される。
配置しなくてもよい方法もあるかもしれないが不明。
④Standaloneで起動できるように設定
この後SessionFrontEndを使うために必要。いったん起動しておいてもよい。
⑤念のためUE4再起動してプロジェクトを開きなおす
そのままではSession FrontEndからTestを実行できなかった。
プロジェクトを開く直すだけでもよいかもしれない?
⑦Session FrontEndを開く
Window > Developer Tools > Session FrontEnd
ウィンドウが開いたら、左側のThis Application
のセッションを選択。
Automatinタブのテスト一覧に、先ほど作成したBPクラス(例ではMyFunctionalTest
)が表示されればOK。
※なお表示されない場合はPlayしたり、UE4開きなおしたり、しばらく待ったりすることで表示される。セッションが張られないと一覧に出てこないようである。
⑧テストを実行
Session FrontEndのウィンドウからStart Testsボタンを押してテストを実行する。
実行するとウィンドウでゲームが起動しつつ、テストの結果がグラフィカルに表示されてゆく。
上記は1つだけだが、複数ある場合は複数の結果が一覧で表示される。
他TIPS
テストを複数回実行する
Start Testsボタンの横の▼から実行回数を増やすことができる。
サンプルコードのように毎回結果が違う場合は複数回テストを回してみてどうなるかをみることができる。