PHPUnit

Mock static function trong PHP

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

Registration Login
Sign in with social account
or
Lost your Password?
Registration Login
Sign in with social account
or
A password will be send on your post
Registration Login
Registration