Unity Test Runner: Setup Attributes and Test Case
Chapter 3 [Tutorial] Unity Test Runner: Setup and Dead Zone Test
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 วินาที