lancerhe/phpunit-mock

PHPUnit 扩展,使用 Runkit 模拟 PHP 内部函数。

1.1.1 2017-10-01 07:12 UTC

This package is auto-updated.

Last update: 2024-09-05 15:10:43 UTC


README

PHPUnit 扩展,使用 Runkit 模拟 PHP 内部函数。

需求

*这是一个可选需求。Runkit 目前不支持覆盖内部函数(exit、die 等)。

安装

使用 composer,在 composer.json 文件中添加以下内容

{
   "require": {
       "lancerhe/phpunit-mock": "dev-master"
   }
}

函数示例

ExampleClass.php

<?php
class ExampleClass {
    public function doExample() {
        return date();
    }
}

ExampleClassTest.php

<?php
class ExampleClassTest extends \PHPUnit_Framework_TestCase {
    
    /**
     * @test
     */
    public function return_expected_value() {
        $param = 'Y-m-d H:i:s';
        $value = 'non date value';
    
        $mockFunction = new PHPUnit_Extensions_MockFunction('date', $this);
        $mockFunction->expects($this->once())
            ->with($this->equalTo($param))
            ->will($this->returnValue($value));
        
        $exampleClass = new ExampleClass();
        $this->assertEquals($value, $exampleClass->doExample($param));
    }
}

类 Example

ExampleClass.php

<?php
class Calculate {
    public $a, $b;
    public function __construct($a, $b) {
        $this->a = $a;
        $this->b = $b;
    }
    public function add() {
        return $this->a + $this->b;
    }

    public function minus() {
        return $this->a - $this->b;
    }
}

ExampleClassTest.php

<?php
class PHPUnit_Extensions_MockClassTest extends \PHPUnit_Framework_TestCase {

    /**
     * @test
     */
    public function method_return_expected_value() {
        $value = 'non value';

        $mockClass = new PHPUnit_Extensions_MockClass('Calculate', ['add'], $this);
        $mockClass->expects($this->any())
            ->method('add')
            ->will($this->returnValue($value));

        $this->assertEquals($value, (new Calculate(4, 2))->add());
    }
}