Unity Test Runner: Teardown Attributes and Test Case

Chapter 4 [Tutorial] Unity Test Runner: Teardown and Touching Platform Test

GatoMaster
2 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 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 ใหม่

--

--