facebook/fbmock

此软件包已被废弃,不再维护。未建议替代软件包。

FBMock 是一个设计简单易用的 PHP 模拟框架。

dev-master 2018-10-29 19:32 UTC

This package is not auto-updated.

Last update: 2020-01-24 14:49:10 UTC


README

FBMock 是一个设计简单易用的 PHP 模拟框架。

与其他模拟框架不同,FBMock 主要只是使用存根和间谍。FBMock 鼓励开发者编写简单的返回行为,仅在适当的情况下使用间谍。

要求

  • HHVM 或 PHP 5.4+

注意:框架的测试使用 PHPUnit,但使用 FBMock 不需要 PHPUnit。

使用方法

包含 init.php 以设置自动加载器

require_once YOUR_FBMOCKS_DIR.'/init.php'

使用 Composer 安装(可选)

要通过 composer 安装此软件包,只需将其添加到 require 并开始使用。

{
    "require": {
        "facebook/fbmock": "*@dev"
    }
}

创建模拟

mock('Foo')

同样,您也可以以相同的方式模拟接口

mock('IFoo')

存根

默认情况下,所有方法都返回 null。配置返回值的辅助方法以 'mock' 前缀开头。

mock('Foo')->mockReturn('bar', 'return value here');

有时,您可能需要比 mockReturn 更多的控制

mock('Foo')->mockImplementation(
    'bar',
    function ($bar_type) {
        return $bar_type == 1;
    }
);

有关其他辅助方法(mockThrow、mockReturnThis 等)请参阅 Mock.php

间谍

$mock_foo = mock('Foo');
$mock->mockReturn('bar', 1);

$code_under_test->doSomething($mock_foo);

// Returns array of calls
$mock_foo->mockGetCalls('bar');

如果您正在使用 PHPUnit,可以将 FBMock_AssertionHelpers 添加到您的 base PHPUnit_TestCase 以获取一些间谍辅助方法

$this->assertCalledOnce($mock_foo, 'bar');
$this->assertCalledOnce($mock_foo, 'bar', $expected_params_as_array); // param assertion is optional
$this->assertCalls($mock_foo, 'bar', $expected_params_for_first_call, $expected_params_for_second_call, ...);

技巧

使用多集功能以提高可读性

mock('Foo')->mockReturn(array(
    'bar' => 1,
    'get' => 'data',
    'run' => true,
))->mockReturnThis('set', 'addID', 'removeID');

利用流畅接口进行简洁的模拟设置

mock('Foo')
    ->mockReturn('bar', 1)
    ->mockThrow('other_method')
    ->mockImplementation('another_method', function () { /* ... */ })
    ->mockReturnThis('setData');

当方法未调用时使用严格的模拟

如果调用任何未模拟的方法,模拟将抛出异常。

$db_conn = strict_mock('DBConnection')->mockReturn('read', $data);

// ...in code under test
$db_conn->write($some_data); // Throws FBMock_MockFrameworkException

自定义

有关根据您的需求自定义 FBMock 的说明,请参阅 CustomConfig-sample.php。

HHVM 仅功能

  • 模拟最终类和有最终方法类的类
  • 模拟内部类

社区

我们有一个 邮件列表。如果您正在使用 FBMock,请给我们发送电子邮件打招呼!