Unity Test Runner: Teardown Attributes and Test Case
Chapter 4 [Tutorial] Unity Test Runner: Teardown and Touching Platform 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 1, Chapter 2, Chapter 3 ใน Part นี้มาลองเขียนในส่วนการ Teardown เพิ่ม โดยการ Teardown จะเหมือนการ reset Scene เพื่อทำการรัน Test Case หลายเคสต่อกัน และมาลองทำตัวอย่างการเทสเพิ่มเติมกัน โดยมาเริ่มที่การสร้าง Teardown
TearDown
ให้เราทำการสร้างเมธอด TearDown โดยการทำงานของเมธอดเราจะสั่งให้ลบ GameObject ทั้งหมดใน Scene
ประกาศ Attribute [TearDown] ทำการสร้างเมธอด TearDown(); ภายในเมธอดจะรัน Foreach โดยเงื่อนไข คือ GameObject ทั้งหมดที่อยู่ใน Scene จากนั้นให้ทำการลบ โดยใช้คำสั่ง Destroy();
Touching Platform Test
เมื่อเราทำการสร้าง Teardown แล้วให้เรามาลองทำอีกตัวอย่างการเทส เพื่อที่เราจะได้ไปทดสอบการทำงานของ Teardown กัน โดยเงื่อนไขการเทส คือ
Test Case: Touching Platform Test
Test Description: เมื่อ Player สัมผัสกับ Plane จะต้องไม่ถูกลบ
Test Step: ปล่อย Player Object ให้ตกลงบน Platform
ในส่วนของเทสนี้ เราจะต้อง setup ฉากเพิ่มก็คือตัว Platform โดยวิธีการสร้างคือให้ ไปที่ Menu bar เลือก GameObject →3D Object → Plane และตั้งชื่อใน Inspector “Platform” และทำเป็น Prefab โดยลากมาเก็บไว้ที่ Resources Folder
จากนั้นให้เปิด Script เทสของเราและเขียน Test Case โดยให้ประกาศ Attribute [UnityTest] และสร้างเมธอด IEnunerator ตั้งชื่อ PlayerTuchPlatform ขึ้นมาใหม่ ภายในเมธอด ให้เราทำการสร้าง Platform โดยใช้คำสั่งในการเรียก GameObject ใน Resources Folder ให้ทำการโหลด Platform ขึ้นมา โดยคำสั่งที่ใช้คือ
MonoBehaviour.Instantiate(Resources.Load<GameObject>(“Platform”));
จากนั้นให้เราสร้างลูปเพื่อจับเวลา 30 วินาที
สร้าง for loop และ yield return new WaitForSecond(1); เพื่อจับเวลา 30 วินาที
ภายในลูปเราจะสร้างเงื่อนไขเพื่อตรวจสอบ ภายใน 30 วินาที Player จะต้องตกลงบน Platform แล้ว Player จะต้องหยุดเคลื่อนที่ โดยใช้คำสั่งดังนี้
GameObject.FindWitchTag("Player").GetComponent<Rigidbody>().Velocity.sqrMagnitude < 0.0001 ในการเช็ค ถ้าหาก Player ไม่หยุดภายใน 30 วินาที ให้ โชว์เคส Fail
และเมื่อ Player ตกลงบน Platform แล้ว Player จะต้องไม่ถูก Destroy
เงื่อนไข หลังจากที่ Player หยุดเคลื่อนที่หลังจาก 1 วินาที yield return new WaitForSeconds(1); แล้ว Player ยังอยู่บน Scene ให้ yield break; จะถือว่าเทสผ่าน ถ้าหาก Player ไม่อยู่บน Scene ให้ โชว์เคส Fail
จากนั้นให้กด Run All จะเห็นได้ว่า Test Runner ของเราจะทำ 2 Test Case และทำการ Teardown ทุกครั้ง เมื่อเริ่ม Test Case ใหม่