ให้เรตสมาชิก: 2 / 5

ดาวใช้งานดาวใช้งานดาวไม่ได้ใช้งานดาวไม่ได้ใช้งานดาวไม่ได้ใช้งาน
 

Yii Framework Unit Testing

Unit testing ของ Yii Framework ถูกเขียนอยู่บน PHPUnit, สรุปหลักการพื้นฐานของการเขียน unit Testing ใน Yii มีดังนี้
- ชื่อ Class เขียนอยู่ในรูปแบบ
XyzTest โดยต้อง extends จาก CTestCase หรือ CDbTestCase เมื่อ Xyz คือชื่อ class สำหรับ test เช่นถ้าเราต้องการเขียน test Post class ชื่อที่ตั้งคือ PostTest ส่วนการ extends นั้น extends CTestCase สำหรับ test ทั่วๆไป ถ้าจะ test active record ควรใช้ CDbTestCase แทน CTestCase เพราะ class PHPUnit_Framework_TestCase เป็น class แม่ของทั้งสอง class นั้นอยู่แล้ว คุณสมบัติต่างๆ ก็จะถูกสือถอดจาก class นั้น
- Save ไฟล์ด้วยชื่อตามรูปแบบ XyzTest.php ไว้ที่ protected/tests/unit/
- ชื่อ method ภายใน class ที่ต้องการ test เขียนตามรูปแบบ testAbc เมื่อ Abc คือชื่อ method
- วิธีการ test method มักจะใช้วิธีใส่ลำดับคำสั่งยืนยัน (assertion statements) เช่น assertTrue, assertEquals ซึ่งทำหน้าที่เป็น checkpoints ในการตรวจสอบความถูกต้องของ Class ของเรา

ตัวอย่างโค้ดการเขียน CommentTest
<?php

class CommentTest extends CDbTestCase
{
    /**
     * We use both 'Post' and 'Comment' fixtures.
     * @see CWebTestCase::fixtures
     */
    public $fixtures=array(
        'posts'=>'Post',
        'comments'=>'Comment',
    );

    public function testFindRecentComments()
    {
        $this->assertEquals(array(), Comment::model()->findRecentComments());

        $comment=new Comment;
        $comment->setAttributes(array(
            'content'=>'comment 1',
            'status'=>Comment::STATUS_APPROVED,
            'create_time'=>time(),
            'author'=>'me',
            'email'=>'me@example.com',
            'post_id'=>$this->posts['sample1']['id'],
        ),false);
        $this->assertTrue($comment->save(false));
        $this->assertEquals(1,$comment->id);

        $comments=Comment::model()->findRecentComments();
        $this->assertEquals(1,count($comments));
        $this->assertEquals($comment->attributes, $comments[0]->attributes);
    }

    public function testApprove()
    {
        $comment=new Comment;
        $comment->setAttributes(array(
            'content'=>'comment 1',
            'status'=>Comment::STATUS_PENDING,
            'create_time'=>time(),
            'author'=>'me',
            'email'=>'me@example.com',
            'post_id'=>$this->posts['sample1']['id'],
        ),false);
        $this->assertTrue($comment->save(false));

        $comment=Comment::model()->findByPk($comment->id);
        $this->assertTrue($comment instanceof Comment);
        $this->assertEquals(Comment::STATUS_PENDING,$comment->status);

        $comment->approve();
        $this->assertEquals(Comment::STATUS_APPROVED,$comment->status);
        $comment=Comment::model()->findByPk($comment->id);
        $this->assertEquals(Comment::STATUS_APPROVED,$comment->status);
    }
}
ทดลองรัน

>phpunit functional/CommentTest.php

ทดสอบรันในรูปแบบอื่นๆอ่านที่บทความ

เตรียมเครื่องทำ สำหรับ PHPUnit และ Selenium
ก่อนรัน ถ้ายังไม่ได้ satrt selenium ให้ start มันก่อนด้วยคำสั่ง
D:\xampp\htdocs\Yii_Framework>java -jar selenium-server.jar

กระทู้ล่าสุดจากเว็บบอร์ด
หัวข้อกระทู้
ตอบ
เปิดดู
ล่าสุด
Apple A14 Bionic ที่สุดของ CPU iPhone 12 ดีจริงไหมไปหาคำตอบกัน
โดย Anonymous อ 19 ม.ค. 2021 11:30 pm บอร์ด พูดคุยเรื่องทั่วไป จับฉ่าย
0
7
อ 19 ม.ค. 2021 11:30 pm โดย บุคคลทั่วไป
ใช้ <i> ใส่ชื่อ icon ที่จะใช้แล้วไม่แสดงบนหน้าจอ
โดย eange08 อ 19 ม.ค. 2021 7:31 pm บอร์ด HTML CSS
1
6
อ 19 ม.ค. 2021 7:36 pm โดย eange08
สอบถามการดึงค่าใน array ที่ได้จาก api กรมอุตุ
โดย eange08 อ 19 ม.ค. 2021 4:43 pm บอร์ด Programming - PHP
2
20
อ 19 ม.ค. 2021 6:48 pm โดย eange08
เรียกค่า api ของกรมอุตุนิยมวิทยา
โดย eange08 อ 19 ม.ค. 2021 3:32 pm บอร์ด Programming - PHP
2
17
อ 19 ม.ค. 2021 3:54 pm โดย eange08
มาทำความรู้จักส่วนประกอบของเรียงความภาษาอังกฤษ
โดย Kannaphat อ 19 ม.ค. 2021 1:03 pm บอร์ด พูดคุยเรื่องทั่วไป จับฉ่าย
0
10
อ 19 ม.ค. 2021 1:03 pm โดย Kannaphat
Web-facing computer คืออะไร
โดย Kannaphat อ 19 ม.ค. 2021 10:53 am บอร์ด ถาม - ตอบ คอมพิวเตอร์
3
25
อ 19 ม.ค. 2021 8:22 pm โดย mindphp
Digital Profile กับ PERSONA คืออันเดียวกัน หรือต่างกันคะ?
โดย MashallMang อ 19 ม.ค. 2021 10:37 am บอร์ด พูดคุยเรื่องทั่วไป จับฉ่าย
1
12
อ 19 ม.ค. 2021 11:06 am โดย mindphp
พอจะมีวิธีทำ dropdown จังหวัดแบบไม่ต้องดึงจากฐานข้อมูล
โดย eange08 จ 18 ม.ค. 2021 10:12 pm บอร์ด Programming - PHP
4
34
อ 19 ม.ค. 2021 11:15 am โดย DanielPe