Unity Test Runner: Setup Attributes and Test Case

Chapter 3 [Tutorial] Unity Test Runner: Setup and Dead Zone Test

GatoMaster
3 min readDec 5, 2018

Chapter 1 Introduction to Unity
Chapter 2 [Tutorial] Unity Test Runner: Scene Setup
Chapter 3 [Tutorial] Unity Test Runner: Setup and Dead Zone Test
Chapter 4 [Tutorial] Unity Test Runner: Teardown and Platform Test

จากบทความที่แล้ว Chapter 2 [Tutorial] Scene Setup เราได้ทำการสร้างฉากสำหรับการเทสเอาไว้แล้ว ใน part นี้เราจะมาเริ่ม Automated testing โดย Test Runner ที่เรามาใช้เทสนั้นมันมาจาก NUnit library

วิธีการเรียกใช้งาน Test Runner

ทำการสร้าง Test Runner โดยไปที่ Window → General → Test Runner

กดเลือก PlayMode และให้ทำการกดปุ่ม “Create PlayMode Test Assembly Folder”

เราจะได้ Folder มาให้ทำการตั้งชื่อ แล้วกดปุ่ม “Create Test Script in Current Folder”

ทำการตั้งชื่อ Script และเปิด Scripts มาซึ่งภาษาที่ใช้ในการเขียนคือ C#

สร้างเมธอด สำหรับการ Setup ฉาก โดยประกาศ Attribute [SetUp]

เมื่อประกาศ Attribute [SetUp] เมื่อสั่ง run จะทำการ setup scene ก่อนทำ Test Case ทุกครั้ง

โดยใน เมธธอด จะทำการโหลด Game Object ขึ้นมาเพื่อสร้างฉากในการเทสให้เราโดยใช้ คำสั่ง

MonoBehaviour.Instantiate(Resources.Load<GameObject>(“ชื่อObject”));

จากนั้นกลับไปที่ Scene ให้ทำการสร้าง Prefab โดยการลาก Game Object ลงมาใน Folder Resources

Dead Zone Test

จากนั้นเมื่อเราได้สร้างเมธอดสำหรับการเซทฉากสำหรับการเทสแล้ว ต่อไปเราจะมาสร้างเมธอดที่ไว้ใช้เทสกัน โดยเราจะกำหนดตัวอย่างในการเทส คือ เมื่อลูกบอลตกลงมา และชนกับ DeadZone ลูกบอลจะต้องหายไปจาก Scene ภายใน 30 วินาที

Test Case: Dead Zone Test

Test Description: เมื่อ PLayer ตกลงบน Dead Zone ตัวละครจะถูกลบภายใน 1 วิ

Test Step: ปล่อย Player Object ให้ตกลงบน Dead Zone

มาทำความเข้าใจ Method IEmumerator กันก่อน

IEmumerator เป็นการทำงานแบบ parallel โดยเมื่อเราเรียกใช้ IEmumerator เมธอดจะทำงานแบบ Couroutine ทำให้สามารถ return ค่า และเมธอดนั้นจะกลับมาทำงานต่อได้ ซึ่งทำให้ภายใน เมธอดเดียวเราสามารถ return ค่าได้หลายครั้ง

ประกาศ Attribute [UnityTest]และ สร้างตัวจับเวลา 30 วินาที

ภายในเมธอด เราจะสร้าง for loop ที่จะใช้จับเวลา 30 วินาที ภายใน loop จะ Return ทุกๆ 1 วินาที โดยใช้คำสั่ง yield return new WaitForSeconds(1);

สร้างเงื่อนไขเช็ค

ภายใน IF จะใช้เงื่อนไข !GameObject.FindWithTag("Player") เมื่อไม่พบ Player จะออกจากเมธอด PlayerKilled(); โดยจะสั้งให้ yield break;

เทส fail

เมื่อภายใน 30 วินาที Player ยังอยู่บน Scene เทสจะ Fail โดยใช้คำสั่ง Assert.Fail("ระบุข้อความ");

จากนั้นทำการทดสอบ Script โดยไปที่ Run All

เสร็จสมบูรณ์สำหรับตัวอย่างการ Test Runner บน Unity

จากการเทสครั้งนี้

  • สังเกตได้ว่า Scripts ที่เราเขียนในการเทส จะต้องไม่รบกวนการทำงานของ Scripts หลัก คือ DeadZone ของเรา
  • เราจะต้องรู้ Expect Result ของการเทส ในที่นี้คือ เมื่อผู้เล่นตายจะต้องโดนลบภายใน 30 วินาที

--

--