---
title: UnrealC++のユニットテスト
tags: 
author: [zbdk](https://convert.docswell.com/user/zbdk)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/VJN39GZ1J8.jpg?width=480
description: C++ breaktime 2025/Winterの発表資料です。 https://cpp-osaka.connpass.com/event/374884/
published: December 19, 25
canonical: https://convert.docswell.com/s/zbdk/K8WX22-2025-12-19-234134
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/VJN39GZ1J8.jpg)

UNREAL C++の
ユニットテスト
zbdk


# Page. 2

![Page Image](https://bcdn.docswell.com/page/YE992WZYE3.jpg)

概要
■ Unreal C++でのテスト方法をまとめました
■ 実行環境
– Windows11
– UE5.5.1
– Visual Studio2022
2


# Page. 3

![Page Image](https://bcdn.docswell.com/page/GE895N1K7D.jpg)

ユニットテスト(単体テスト)とは
■ プログラム
– 多数の部品を組み合わせて作られるもの
■ その個々の部品(ユニット)が動作しているかを確かめる
テストのこと
– 関数だったり
– クラスだったり
3


# Page. 4

![Page Image](https://bcdn.docswell.com/page/LELWYPQPJR.jpg)

UEのユニットテスト
■ Engine/Source/Runtime/Core/Public/Misc/AutomationTest.
h
■ FAutomationTestBaseを基底とした派生クラスとして実装
■ クラス実装用のマクロが用意されている
– 簡易テスト
– 複合テスト
4


# Page. 5

![Page Image](https://bcdn.docswell.com/page/4JM9N412EW.jpg)

簡易テスト記述例
5


# Page. 6

![Page Image](https://bcdn.docswell.com/page/PJRGDWL5E9.jpg)

チェック関数マクロ
■ UTESTから始まるチェック用マ
クロがRunTest関数内で使用可能
■ これで値が正しいかをチェック
■ いろんな種類がある
– 右のマクロはごく一部
6


# Page. 7

![Page Image](https://bcdn.docswell.com/page/PEXX1PWXEX.jpg)

テスト実行方法(1/2)
7


# Page. 8

![Page Image](https://bcdn.docswell.com/page/3EKW2DV9ED.jpg)

テスト実行方法(2/2)
8


# Page. 9

![Page Image](https://bcdn.docswell.com/page/L7314RM9J5.jpg)

デモ
9


# Page. 10

![Page Image](https://bcdn.docswell.com/page/87DXQY68EG.jpg)

複合テスト
10


# Page. 11

![Page Image](https://bcdn.docswell.com/page/VJPPL6YWJ8.jpg)

HTTPリクエストのテスト例
11


# Page. 12

![Page Image](https://bcdn.docswell.com/page/2EV2Q3G9EQ.jpg)

非同期版HTTPリクエスト
12


# Page. 13

![Page Image](https://bcdn.docswell.com/page/57GRW384EL.jpg)

Latentコマンド
■ 1フレーム内に収まらないテストを実行する場合に使用
– 定義マクロで構造体を定義
– テスト中にコマンドを追加
13


# Page. 14

![Page Image](https://bcdn.docswell.com/page/4EQV359RJP.jpg)

Latentコマンド
■ 毎フレームUpdateが
呼び出される
■ Updateがtrueを返すと完了
■ エラーはUE_LOGで送出
14


# Page. 15

![Page Image](https://bcdn.docswell.com/page/KJ4M19XQE1.jpg)

ユニットテストのメリット
■ 自分が知らない関数/クラス
– 使い方をチェックできる
– テストコード消してしまいがちだが残しておける
■ 自分が作った関数/クラス
– 使い方を他人に示せる
– テストしている実装=メジャーな使い方
– 「こういう風に使ってね。この時の値は○○だよ」
15


# Page. 16

![Page Image](https://bcdn.docswell.com/page/LE18GKNL7G.jpg)

テスト駆動開発(TDD)
■ 失敗するテストコードを1つ追加する
■ そのあとメソッドを実装していく
– 中身ができて期待した通りに動作するようになるので
テストは成功する
■ テストコードを1つ追加する
■ 複雑になってきたらリファクタリング
– それまでに書いたテストコードが「添え木」になる
16


# Page. 17

![Page Image](https://bcdn.docswell.com/page/GEWZKD4QE2.jpg)

ここから未発表資料
LT空枠を埋めるべく用意したけど時間押してたので使わなかったやつ
というより時間が足りなくて削った内容
17


# Page. 18

![Page Image](https://bcdn.docswell.com/page/47Z1ZG23J3.jpg)

Spec
■ ふるまい駆動開発に従って構築されたテストの名称
■ ふるまい駆動開発(Behavior Driven Development)
– コードではなく「ふるまい」を記述するらしい
– UE、C++に限らないテスト手法
■ 少なくともUE4.15くらいにはありそう
■ UE公式ページ曰く
– 自己文書化コードである
– 流れるように (fluent) 記述でき、より DRY なコードに
なることが多い
18


# Page. 19

![Page Image](https://bcdn.docswell.com/page/YJ6LZYVZEV.jpg)

Spec記述例
19


# Page. 20

![Page Image](https://bcdn.docswell.com/page/GJ51WGD974.jpg)

Spec記述例
スコープ
1つのテスト実行単位
文字列はshouldから始めるべきらしい
これ本当に文章として読める?
「this」かなり邪魔じゃない??
20


# Page. 21

![Page Image](https://bcdn.docswell.com/page/9E21QY85JR.jpg)

Spec版HTTPリクエスト(1/2)
メンバ変数を定義
各テスト前に実行する処理
Describeは入れ子にできる
各テスト前に実行する処理
21


# Page. 22

![Page Image](https://bcdn.docswell.com/page/D7YZWG66JM.jpg)

Spec版HTTPリクエスト(2/2)
■ 共通処理を
BeforeEachにまとめ
られる
1フレームで終わらないので先頭にLatent付き
完了用デリゲート引数
22


# Page. 23

![Page Image](https://bcdn.docswell.com/page/VEN39811E8.jpg)

Specの利点
■ 構造化したテストを書けて従来の欠点が解消
■ 従来の欠点
– 新しいテストを作るたびにクラスが必要
– 似たような処理がコピペで増える
■ 特にセットアップ部分
■ コピペすると仕様変更に伴う修正が大変
– 複合テストの引数が文字列
■ 数値へのパースが必要だった
■ パースにバグが潜む可能性も
23


