หลังจากที่ผมได้เรียนรู้การนำ Unit Test มาใช้งานเขียนโปรแกรม ก็เห็นประโยชน์ต่างๆ ที่ได้จากการเขียน Unit Test จนทำให้ผมติดการเขียนโปรแกรมที่มีการเขียน Unit Test ไปด้วยระหว่างการพัฒนา เดิมทีผมเริ่มเขียน Unit Test ด้วย NUnit เป็น Unit Test ของฝั่ง .NET เป็นตัวที่ ported มาจาก JUnit ซึ่งเป็น Unit Test Framework ของ Java แต่วันนี้ผมจะขอพูดถึงการใช้งาน SimpleTest เป็น Unit Test Framework ของฝั่ง PHP
เนื่องด้วยผมมีความจำเป็นที่ต้องพัฒนาเว็บด้วย PHP จึงเริ่มมองหา Unit Test ของ PHP ตัวแรกที่ผมเลือกมาใช้คือ PHPUnit เพราะคิดว่ามีความคล้ายคลึงกับ NUnit มากที่สุด และต่างก็ได้รับรูปแบบคำสั่งและการใช้งานแบบเดียวกับ JUnit แต่ผมก็พบว่า PHPUnit ค่อนข้างมีความยุ่งยากในการติดตั้ง จึงมองหา Framework ตัวอื่นแทน จนพบกับ SimpleTest ซึ่งใช้ได้ง่ายสมกับชื่อของเขาจริง เรามาดูกันเลยดีกว่าครับว่าจะใช้ได้ง่ายแค่ไหน
เริ่มจากสิ่งที่ต้องมีในการเขียน Unit ด้วย SimpleTest
เมื่อทุกอย่างพร้อมแล้วก็เริ่มกันเลย
สร้าง folder ใหม่ใน folder www ให้ชื่อว่า LearnSimpleTest เราจะใช้ folder นี้เก็บ PHP files
copy SimpleTest source ที่ download มาไปวางใน folder LearnSimpleTest
สร้าง function เพื่อทำการแปลงอุณหภูมิ Celsius และ Fahrenheit
<?php
//TemperatureConverter.php
function celsiusToFahrenheit ($celsius)
{
return $celsius * 9/5 + 32;
}
function fahrenheitToCelsius($fahrenheit)
{
return ($fahrenheit - 32)*5/9;
}
?>
สร้าง PHP file โดยตั้งชื่อว่า TemperatureConverterTest.php เปิด file นี้ขึ้นมา และเขียนคำสั่งต่อไปนี้ลงไป
<?php
//TemperatureConverterTest.php
//เพิ่มเข้าเพื่อใช้งาน SimpleTest
require_once('simpletest/autorun.php');
//file ที่เก็บ function ที่จะ test
require_once('TemperatureConverter.php');
//class ที่สร้างขึ้นมาเพื่อเขียน Unit Test ต้องสืบทอดจาก UniTestCase
class TemperatureConverterTest extends UnitTestCase {
//test function ต้องมีชื่อข้นต้นด้วยคำว่า test
function testCelsiusToFahrenheit() {
//arrange
$celsius = 20;
//act
$fahrenheit = celsiusToFahrenheit($celsius);
//assert
$expected = 68;
$this->assertEqual($expected, $fahrenheit);
}
function testFahrenheitToCelsius() {
//arrange
$fahrenheit = 68;
//act
$celsius = fahrenheitToCelsius($fahrenheit);
//assert
$expected = 20;
$this->assertEqual($expected, $celsius);
}
}
?>
run test ด้วยการเปิด file TemperatureConverterTest.php บน browser ด้วย url http://localhost/LearnSimpleTest/TemperatureConverterTest.php
ผลลัพธ์ที่ได้เมื่อ test ทั้งหมดที่เขียนขึ้นมาผ่าน หมายความว่า function ที่เขียนขึ้นมาทำงานและให้ผลลัพธ์เป็นค่าที่ถูกต้อง
มีหลายเรื่องที่ผมยังไม่ได้กล่าวถึงในเรื่องของ UnitTest อย่างเช่น
โดยผมจะขอกล่าวถึงเรื่องเหล่านี้ในโอกาสต่อไป พร้อมกันนี้ผมได้แนบ file ที่ใช้ในตัวอย่างนี้ download ได้ที่นี่
สุดท้ายหวังว่าบทความนี้จะเป็นประโยชน์สำหรับนักพัฒนาที่ต้องการเขียน Unit Test กับ PHP นะครับ