โปรแกรมเมอร์หลายๆคน คงรู้จักการเขียน Automation Test กัน ซึ่งเครื่องมือก็แตกต่างกันไปตามภาษาที่ใช้ในการเขียน เช่น JUnit (Java), NUnit (c#), phpUnit (PHP) คราวนี้เรามาเรียนการเขียน Unit Test บน Delphi กันด้วยเครื่องมือที่ชื่อว่า DUnit
DUnit เป็นเครื่องมือที่ใช้เขียนโปรแกรมทดสอบโปรแกรม (ฟังดูงงๆเนอะ) ในภาษา Delphi เป็นการเขียนโปรแกรมเพื่อเข้าไปทดสอบโปรแกรมระดับ Unit
การใช้งาน DUnit นั้นง่ายกว่าที่คิดเยอะครับ (ตอนลองครั้งแรกนึกว่ายาก) โดยผมจะเอามาประยุกต์กับการพัฒนาซอฟแวร์แบบ Test-Driven Development (TDD) ที่กำลังเป็นที่นิยมกันอยู่ในตอนนี้ โดยผมจะเริ่มทำโดยการสร้าง Project ง่ายๆขึ้นมา โดยผมจะเริ่มเขียน Test Case ขึ้นมาก่อน แล้วค่อยๆเขียน Code การทำงานไปเรื่อยๆ ดูตามลำดับไปเรื่อยๆนะครับ
ในตัวอย่าง ผมจะใช้ Delphi XE4 ในการพัฒนานะครับ
การสร้าง Test Project และ Test Case ของ DUnit
- ผมจะสร้าง Project เปล่าๆ ขึ้นมา 1 Project โดย Project ที่ผมสร้างนั้น จะเป็นประเภท VCL Forms Application
- สร้าง Function ขึ้นมา (ในที่นี้ผมจะสร้าง Function สำหรับบวกเลข โดยใช้ชื่อว่า Sum2Number) เป็น Function เปล่าที่ยังไม่ผ่านการ Implement ใดๆ
- เราจะทำการสร้าง Project ของ DUnit ขึ้นมาสำหรับการทดสอบ Project ก่อน โดยไปที่ File -> New -> Other -> Unit Test -> Test Project
- กรอกรายละเอียดสำหรับการสร้าง Unit Project โดย Source Project คือ Project ต้นทางที่เราจะทำการทดสอบ, Project Name จะเป็นชื่อ Project ของ Unit Test, Location จะเป็นส่วนที่ใช้ในการเก็บไฟล์ Unit Test หลังจากตั้งค่าเสร็จ กด Next
- เลือกการทำงานของตัว DUnit ว่าจะให้ทำงานเป็น Console Mode หรือ GUI Mode ในที่นี้จะเลือกเป็น GUI Mode เพื่อความง่ายในการใช้งาน แล้วกด Finish
- หลังจากนั้น Delphi XE จะทำการสร้าง DUnit Project ขึ้นมาและจะถูกเพิ่มใน Project Group เป็นที่เรียบร้อย
- หลังจากที่ได้ Test Project ขึ้นมาแล้ว เราจะต้องทำการสร้าง Test Case ขึ้นมาเพื่อใช้ในการ Test ก่อน โดยการสร้าง TestCase นั้น ทำได้โดยการเลือก Project ใน Project Group เป็น Project ของ DUnit แล้วใช้เมนู File -> New -> Other -> Unit Test -> Test Case
- จะมีหน้าต่างให้เลือกไฟล์ Source Code ภายใน Project ขึ้นมา ให้เลือกไฟล์ Source Code ที่เราต้องการสร้าง Unit Test แล้วจะมีรายชื่อ Function และ Procedule ในไฟล์ๆนั้นขึ้นมา ให้เราเลือก Function หรือ Procedule ที่เราต้องการทำ Unit Test แล้วกด Next
- ตั้งค่าไฟล์ที่ใช้ในการเขียน Unit Test ตามสะดวก (ผมขอใช้แบบ Default ไปก่อนนะครับ เพื่อความง่าย) แล้วกด Finish
- ตัวโปรแกรมจะสร้าง Default Code ของ DUnit เอาไว้ให้เราเขียน Test เพิ่มเติมเข้าไป
ทำ TDD เบื้องต้น สำหรับภาษา Delphi
เอาหล่ะ หลังจากที่เราได้รู้จักการสร้าง Project Test และ Test Case ของตัว DUnit กันแล้ว หลังจากนี้ เราจะมาเริ่มทำการพัฒนาซอฟแวร์ด้วย TDD บนภาษา Delphi กัน โดยผมจะต่อเนื่องจากบนหัวข้อที่แล้วเลยนะครับ โดยผมมี Unit อยู่ 1 ตัว ชื่อว่า “Unit1.pas” และ Test Case ชื่อว่า “TestUnit1.pas” เอาหล่ะ เราลองมาทำ TDD กันดูครับ
- เราต้องทำการร่าง Test Case ของ Function ที่เราต้องการทำข้นมาก่อน โดย Test Case ของ Function ของผมคือ “รับค่าเลข 2 ตัว มาบวกกัน โดยจำนวนตัวเลขที่รับเข้ามา ต้องไม่เกิน 200 และไม่น้อยกว่า 0” ร่างออกมาเป็นตาราง Test Case ได้ ดังนี้
ลำดับ ตัวเลขที่ 1 ตัวเลขที่ 2 ผลลัพธ์ 1 0 0 0 2 1 0 1 3 -1 0 Error : Out of Rage 4 199 0 199 5 200 0 200 6 201 0 Error : Out of Rage 7 Test 0 Error : Invalid Input 8 0 1 1 9 0 -1 Error : Out of Rage 10 0 199 199 11 0 200 200 12 0 201 Error : Out of Rage 13 0 Test Error : Invalid Input 14 1 1 2 15 199 199 398 16 200 200 400 17 201 201 Error : Out of Rage 18 -1 -1 Error : Out of Rage 19 Test Test Error : Invalid Input - หลังจากเราได้ตาราง Test Case แล้ว ให้เรานำตาราง Test Case ไป Implement กับ DUnit ได้ ดังนี้
- หลังจากนั้น ให้ลอง Run Unit Test ดู
- จะเห็นว่า ไม่มี Test Case ที่ Run ผ่าน เพราะมันเป็น Function เปล่า ทีนี้เราก็ Implement Function ให้ Run ผ่านทุก Test Case
- หลังจาก Implement Function เรียบร้อยแล้ว แล้ว Run Test อีกครั้ง ผลคือ…
- หลังจากนี้ ใครอยากจะ Code refactoring ก็แล้วแต่สะดวกครับ แต่ Test Case ทุกตัว ต้อง Run ผ่านเหมือนเดิม