Mock static function trong PHP
PHP
78
PHPUnit
3
White

Đặng Thành Nam viết ngày 23/05/2015

Static function trong PHP

Static function không phải là gì xa lạ đối với hầu hết các ngôn ngữ hiện đại. Trong PHP, static function hay được sử dụng với singleton pattern. Dưới đây là một ví dụ

public class Book
{
    /**
     * @return Book
     */
    public static function Instance()
    {
        static $instance = null;
        if ($instance === null) {
            $instance = new Book();
        }
        return $instance;
    }

    /**
     * Private constructor
     */
    private function __construct()
    {
    }
}

Như vậy khi khởi tạo instance của class Book chúng ta có thể làm như sau:

$book1 = Book::Instance();
$book2 = Book::Instance();
var_dump($book1 === $book2);

Ở đây kết quả của $book1 === $book2 sẽ là True.

Static function và PHPUnit

Để mock static function trong PHPUnit chúng ta sẽ cần dùng đến một hàm đặc biệt. Sebastian Bergmann, tác giả của PHPUnit đã viết một bài blog về PHPUnit và static function. Nói một cách tóm gọn thì ta có thể mocking như sau

$class::staticExpects($this->any())
              ->method('helper')
              ->will($this->returnValue('bar'));

Hàm staticExpects() đối với static function đơn giản có tác dụng giống hệt expects() đối với các function bình thường. Tuy nhiên staticExpects() chỉ chạy được với các static funtion mà class chủ thế chính là class được mock.

Nếu Class bạn muốn mock lại gọi 1 static function của 1 class khác , VD otherClass::anotherStaticMethod() thì xin chia buồn, class của bạn là không thể test được =D

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Đặng Thành Nam

6 bài viết.
15 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
10 4
(Ảnh) Laravel vừa thông báo nâng cấp bản v5.1, lần đầu tiên trong lịch sử cung cấp chính sách hỗ trợ dài hạn (longtime support) với người dùng. Ch...
Đặng Thành Nam viết 3 năm trước
10 4
White
8 0
Migration là gì Migration là một tính năng được "vay mượn" từ Rails Ruby framework, rất hữu dụng khi chúng ta thay đổi database (thường là MySQL) ...
Đặng Thành Nam viết 3 năm trước
8 0
White
7 3
Associative array là object sẽ gặp rất nhiều trong quá trình làm PHP. Ở bài này mình sẽ tổng hợp các cách nối associative array phổ biến và sự khá...
Đặng Thành Nam viết hơn 3 năm trước
7 3
Bài viết liên quan
White
11 1
Reflection trong PHP Reflection đã được trình bày ở (Link). Ở đây mình nhắc lại một chút. Reflection là một bộ API được cung cấp từ PHP5 trở đi, r...
Vu Nhat Minh viết hơn 3 năm trước
11 1
White
2 2
Bash script to fast serve Laravel project Lười gõ dòng lệnh quá nên tạo ra cái script để gõ nhanh :D laravelstart.sh /bin/bash if z "$1" ] ...
Vũ Hoàng Chung viết hơn 1 năm trước
2 2
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
6 bài viết.
15 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!