Posted at

[ #UE4 ]Blueprintでユニットテスト・機能テスト

More than 1 year has passed since last update.

UnrealEngine4(以下UE4)のドキュメントにはオリジナルのテストはC++で書くように書いてあるが実はBlueprint(以下BP)でも書くことができる。やり方を簡単に紹介。


TL;DR



  • FunctionalTestクラスを継承したBPクラスを作成してテストのBPノードを書く

  • テスト対象のレベルに上記BPを配置、StandAloneでPlayできるようにしておく

  • SessionFrontEndで複数のテストやテスト回数をグラフィカルにチェック


環境

4.14以降?ここでは4.15で説明。


やりかた


FunctionalTestの子クラス作成

まずはテストを書くBPクラスを作成する。親クラスはFunctionalTestを指定。

PickParentClass_FunctionalTest.PNG


②テストのBPノードグラフを書く

とりあえずサンプルとしてランダムに0~10の数字を返し、5以上なら成功、未満なら失敗という簡単なユニットテストのようなノードを書いてみる。

SimpleUnitTestNode.PNG

code

なお実際のユニットテストとしてならBPの関数などを呼び出す形になるだろう。

以下、重要なノードの説明。


Event Start Testイベントノード

ここからテストの処理が開始する。最終的にFinish Testノードで終わらないとテストが完了せずにタイムアウトになるので注意。


Finish Testノード

テスト結果を通知して終了するノード。 テストを書くときに一番大事なノード。 失敗時にMessageLogに出力するメッセージの設定なども設定できる。

FinishTestNode.PNG

Test Result入力ピンのSucceeded, Failedあたりはよく使うことになるはず。


Event Prepare Testイベントノード

テスト開始前に呼ばれるイベントノード。テスト前にやっておきたい処理を書いておく。


Set Time Limitノード

タイムアウトになるまでの時間や、タイムアウトを何とみなすかの設定をするノード。これがなくてもタイムアウトで失敗になる。

SetTimeLimitNode.PNG


③BPをテスト対象のレベルに配置

TestOnMap.PNG

レベルに配置すると、専用の3D Widget付きで表示される。

配置しなくてもよい方法もあるかもしれないが不明。


④Standaloneで起動できるように設定

PlayStandalone.PNG

この後SessionFrontEndを使うために必要。いったん起動しておいてもよい。


⑤念のためUE4再起動してプロジェクトを開きなおす

そのままではSession FrontEndからTestを実行できなかった。

プロジェクトを開く直すだけでもよいかもしれない?


⑦Session FrontEndを開く

OpenSessionFrontEnd.PNG

Window > Developer Tools > Session FrontEnd

ウィンドウが開いたら、左側のThis Applicationのセッションを選択。

Automatinタブのテスト一覧に、先ほど作成したBPクラス(例ではMyFunctionalTest)が表示されればOK。

ActivateSessionFrontend.PNG

※なお表示されない場合はPlayしたり、UE4開きなおしたり、しばらく待ったりすることで表示される。セッションが張られないと一覧に出てこないようである。


⑧テストを実行

Session FrontEndのウィンドウからStart Testsボタンを押してテストを実行する。

実行するとウィンドウでゲームが起動しつつ、テストの結果がグラフィカルに表示されてゆく。

Result1.PNG

上記は1つだけだが、複数ある場合は複数の結果が一覧で表示される。


他TIPS


テストを複数回実行する

Start Testsボタンの横の▼から実行回数を増やすことができる。

10Times.PNG

サンプルコードのように毎回結果が違う場合は複数回テストを回してみてどうなるかをみることができる。


参考