ให้เรตสมาชิก: 1 / 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

กระทู้ล่าสุดจากเว็บบอร์ด
หัวข้อกระทู้
ตอบ
เปิดดู
ล่าสุด
เปลี่ยน data type จาก numeric เป็น character varying อย่างไร pg AdminIII
โดย kkeinezung ศ 17 ส.ค. 2018 9:43 pm บอร์ด Programming - PHP
0
5
ศ 17 ส.ค. 2018 9:43 pm โดย kkeinezung
จัดการที่อยู่ อำเภอ ตำบล จังหวัด โดยไม่ต้องพิมพ์เองยังไงคะ
โดย mook2LRC1 ศ 17 ส.ค. 2018 8:08 pm บอร์ด Joomla Development
1
5
ศ 17 ส.ค. 2018 8:36 pm โดย tsukasaz
B - ใบกำกับภาษี วันที่ตกบรรทัด
โดย taemmynatchapon ศ 17 ส.ค. 2018 6:35 pm บอร์ด M.D.Soft Co.,Ltd. - Tester
1
5
ศ 17 ส.ค. 2018 8:18 pm โดย thatsawan
คำสั่งตัดสินใจการทำงาน PHP แบบ if และ switch
โดย tai14 ศ 17 ส.ค. 2018 5:53 pm บอร์ด PHP Knowledge
0
12
ศ 17 ส.ค. 2018 5:53 pm โดย tai14
สอบถามวิธีแก้เมื่อกด Start Mysqlไม่ได้ โปรแกรม Xampp
โดย tai14 ศ 17 ส.ค. 2018 5:09 pm บอร์ด Programming - PHP
1
45
ศ 17 ส.ค. 2018 6:53 pm โดย tsukasaz
แนะนำ module nltk ตัดคำที่ไม่จำเป็น
โดย tatiya ศ 17 ส.ค. 2018 4:55 pm บอร์ด Python Knowledge
0
4
ศ 17 ส.ค. 2018 4:55 pm โดย tatiya
ตัวดำเนินการ PHP
โดย tai14 ศ 17 ส.ค. 2018 4:04 pm บอร์ด PHP Knowledge
0
12
ศ 17 ส.ค. 2018 4:04 pm โดย tai14
B - ใบปริ้นบาร์โค้ดแสดงผลไม่ถูกต้อง [2018-08][005]
โดย thatsawan ศ 17 ส.ค. 2018 11:40 am บอร์ด Hachanna - Testter
0
3
ศ 17 ส.ค. 2018 11:40 am โดย thatsawan
ทำความรู้จักกับตัวแปร Array
โดย tai14 ศ 17 ส.ค. 2018 10:41 am บอร์ด PHP Knowledge
0
15
ศ 17 ส.ค. 2018 10:41 am โดย tai14
งานประจำวันที่ 17 สิงหาคม 2561
โดย Lamduan ศ 17 ส.ค. 2018 10:10 am บอร์ด M066 - นางสาวลำดวน พันโอดเบี้ย
0
4
ศ 17 ส.ค. 2018 10:10 am โดย Lamduan
งานประจำวันที่ 17 สิงหาคม 2561
โดย tatiya ศ 17 ส.ค. 2018 9:31 am บอร์ด M065 - ตติยะ นาชัย
1
6
ศ 17 ส.ค. 2018 9:35 pm โดย tatiya
งานประจำวันที่ 17 สิงหาคม 2561
โดย pprn ศ 17 ส.ค. 2018 9:20 am บอร์ด MT25 - นางสาวปรียากมล รินนาศักดิ์
1
13
ศ 17 ส.ค. 2018 6:19 pm โดย pprn
งานประจำวันที่ 17 สิงหาคม 2561
โดย prakon ศ 17 ส.ค. 2018 9:19 am บอร์ด MT24 - นายปกรณ์ วิริยะธนวิโรจน์
1
17
ศ 17 ส.ค. 2018 9:20 am โดย prakon
งานที่ต้องทำประจำวันที่ 17 สิงหาคม 2561
โดย tai14 ศ 17 ส.ค. 2018 9:09 am บอร์ด MT26 - นางสาวอัครยุภา ยงยุทธ
1
12
ศ 17 ส.ค. 2018 7:01 pm โดย tai14
ตัวแปรใน PHP
โดย tai14 พฤ 16 ส.ค. 2018 7:18 pm บอร์ด PHP Knowledge
0
20
พฤ 16 ส.ค. 2018 7:18 pm โดย tai14
เครื่องมือและรูปแบบการเขียน PHP
โดย tai14 พฤ 16 ส.ค. 2018 5:17 pm บอร์ด PHP Knowledge
0
15
พฤ 16 ส.ค. 2018 5:17 pm โดย tai14
การ return ค่า ออกมาใช้นอก class ใน python
โดย tatiya พฤ 16 ส.ค. 2018 4:36 pm บอร์ด Python Knowledge
0
8
พฤ 16 ส.ค. 2018 4:36 pm โดย tatiya
ทำความรู้จักกับภาษา PHP
โดย tai14 พฤ 16 ส.ค. 2018 4:10 pm บอร์ด PHP Knowledge
0
15
พฤ 16 ส.ค. 2018 4:10 pm โดย tai14
R - เตรียมข้อมูลใบปริ้นที่ต้องทำเพิ่ม
โดย thatsawan พฤ 16 ส.ค. 2018 1:43 pm บอร์ด OpenERP - MD-ERP
5
51
พฤ 16 ส.ค. 2018 5:29 pm โดย wilawan
รบกวนสอบถามหน่อยครับ Jquery ของ SignalR ไม่ทำงานพอมีวิธีแก้ไหมค่ะ
โดย supattra_su พฤ 16 ส.ค. 2018 12:38 pm บอร์ด Programming - PHP
4
26
พฤ 16 ส.ค. 2018 1:54 pm โดย supattra_su