เอาล่ะมาเริ่มกันเลยหากยังไม่ได้ทำการติดตั้ง 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 ความคิดเห็น:
แสดงความคิดเห็น