はじめに
T・D・D!
T・D・D!
USA的なノリでTDDしてみよう。
あと@t_wadaさんっていうライオンにも怒られるらしいのでテスト書いていきましょう
TDDが何とかどうしてやる必要があるのかとかはwikipediaあたりを見てください。
環境
Unity 2018.3.4f1
参考
Unity使いは全員Unity Test Runnerを使え!爆速のトライ&エラー環境だぞ! - Qiita
Unityでちゃんとテストを書きたい人のためのまとめ - Qiita
Unity Test Runner - Unity マニュアル
Unityテスト完全に理解した(実機、自動、利のあるテストに食らいつく話) - Speaker Deck
上記リンクを参考にしてUnityで動作するテストコードを書いていきます。
やったこと
まず最初に失敗するテストを書きます。
最初にUnityTestRunnerを起動してテストコード保存フォルダ、スクリプト作成ボタンを押していってシンプルなテストコードだけ記述されたスクリプトを作成します。
その追加されたクラスの中に、とりあえずこんなバカみたいに必ず失敗するコードを書いてみます
// バカみたいに失敗するテスト
[Test]
public void NewTestScriptSimpleRun()
{
Assert.IsTrue(false);
}
はい、見事に追加したコードだけ失敗しました。やったね。
コンソールには下記のようなエラーが出ます。
Assertion failure. Value was False
Expected: True
UnityEngine.Assertions.Assert:IsTrue(Boolean)
kt.Tests.NewTestScript:NewTestScriptSimpleRun() (at Assets/Tests/NewTestScript.cs:26)
System.Reflection.MethodBase:Invoke(Object, Object[])
NUnit.Framework.Internal.Reflect:InvokeMethod(MethodInfo, Object, Object[])
NUnit.Framework.Internal.MethodWrapper:Invoke(Object, Object[])
NUnit.Framework.Internal.Commands.TestMethodCommand:RunNonAsyncTestMethod(ITestExecutionContext)
NUnit.Framework.Internal.Commands.TestMethodCommand:RunTestMethod(ITestExecutionContext)
NUnit.Framework.Internal.Commands.TestMethodCommand:Execute(ITestExecutionContext)
NUnit.Framework.Internal.Commands.TestActionCommand:Execute(ITestExecutionContext)
UnityEditor.EditorApplication:Internal_CallUpdateFunctions()
ちゃんと意図通りにテストが失敗することを確認したら、今度は成功するコードを書きます。
とりあえずバカみたいに成功するコードを書いてみます。
// バカみたいに成功するテスト
[Test]
public void NewTestScriptSimpleRun()
{
Assert.AreEqual(2, 1+1);
}
![UnityTestRunnerSuccessShot.jpg (460×231)] (https://raw.githubusercontent.com/KTA552/MediaUploader/master/img/UnityTestRunnerSuccessShot.jpg)
成功しました。今回は中身に意味のないコードですが、
実装→失敗するテスト→機能するテスト→コードの拡張→失敗するテスト→機能するテスト→・・・
上記を繰り返すことで多くのテストが行われ、保守性の高くモジュール化されたコードが書けると思います。
ちゃんと意味のあるテストコードを書いていく場合、上述した参考リンク先を元にテスト機能を拡充していけばいいかなと思います。
今回のサンプルのリポジトリは下記です。
KTA552/UnityTestRunnerTrial