เอาล่ะมาเริ่มกันเลยหากยังไม่ได้ทำการติดตั้ง PHPUNIT ก็ทำการติดตั้งให้เรียบร้อยครับผมได้เขียนไว้แล้วในบทความเก่าสามารถอ่านได้ แล้วหากยังไม่ได้ติดตั้ง Laravel ก็ติดตั้งให้เรียบร้อยซึ่งวิธีการก็ได้เขียนไว้แล้วในบทความที่ผ่านมา
เมื่อติดตั้ง phpunit & Larvel เสร็ดแล้วก็มาเริ่มกันเลย ผมจะลองสร้าง Controller ตัวหนึ่งขึ้นมาเพื่อทำงานบางอย่าง แล้วจะเขียน Unittest เพื่อทำการทดสอบมัน
โครงสร้างของไฟล์ Laravel unit Test จะอยู่ที่ Folder test ซึ่งจะรวบรวมเอาเคสทั้งหมดไว้ที่นี่ เช่น
Acceptance , Integration and unit ครับ ซึ่งจะถูก ควบคลุมด้วย config file ชือว่า phpunit.xml ซึ่งเราสามารถแก้ค่าต่าง ๆได้รายละเอียดค่อนข้างมากครับลองไปเปิดไฟล์ดู
PHPUnit มีสิ่งที่ต้องคำนึงก่อนเขียนเล็กน้อยครับ
- สามารถ extends class TEST ได้เลยภายใน Folder Test ไม่ต้อง Use ก่อน
- มีฟังก์ชั่นพิเศษให้ใช้เช่น setUp() ; เป็นการเตียมค่าก่อนนำไปใช้งาน
- ต้องขึ้นต้องฟังก์ชั่นด้วยคำว่า test มันถึงจะรันให้
- สามารถ use class อื่น ๆ ได้ปรกติ
- ถ้าเป็นไปได้ควรเขียน 1 function ทำแค่เรื่องนั้นเรื่องเดียว อย่านำมายำรวมกัน
PHPUnit ฟังก์ชั่นพื้นฐาน
- call
- assertEquals
- assertInternalType
- assertObjectHasAttribute
- assertTrue
- assertFalse
- assertNull
- assertCount
สามารถอ่านเพิ่มเติมได้ที่ คู่มือphpunit
หลักการเบื้องต้นก็ประมาณนี้ครับเอาล่ะมาเริ่มเขียนก็เลย
class TestCaseValidate extends TestCase { public $username = "test"; public $password = "testpass"; public function listTest() { return [ 'item' => # get usage post. [ 'url' => '/api/v1/check/test', 'code' => '400', 'message' => 'Bad Request', 'method' => 'GET', 'param' => [ 'transaction_id' => '1453783608', 'service_number' => '08482848242', 'username' => $this->username, 'password' => $this->password, ], ], # get usage pre. [ 'url' => '/api/v1/check/test', 'code' => '200', 'message' => 'OK', 'method' => 'GET', 'param' => [ 'transaction_id' => '1453783608', 'service_number' => '08482848242', 'username' => $this->username, 'password' => $this->password, ], ], # Request Invalid. [ 'url' => '/api/v1/check/test', 'code' => '400', 'message' => 'Bad Request', 'method' => 'GET', 'param' => [ 'transaction_id' => '1453783608', 'service_number' => '', 'username' => $this->username, 'password' => $this->password, ], ], #end array ]]; } public function testCaseExcute() { $listTest = $this->listTest(); foreach ($listTest['item'] as $key => $value) { $dataResult = $this->call($value['method'], $value['url'], $value['param']); $resultData = $dataResult->getData(); $this->assertInternalType('object', $resultData); $this->assertObjectHasAttribute('header', $resultData); $this->assertObjectHasAttribute('transaction_id', $resultData); $this->assertEquals($resultData->header->code, $value['code']); $this->assertEquals($resultData->header->message, $value['message']); if ($resultData->header->code == 200) { $this->assertObjectHasAttribute('data', $resultData); $this->assertObjectHasAttribute('total', $resultData); $this->assertObjectHasAttribute('count_result', $resultData); } } } }
0 ความคิดเห็น:
แสดงความคิดเห็น