当前位置: 首页 > 工具软件 > FBMock > 使用案例 >

easy mock php,FBMock: FBMock 是一个简单易用的 PHP 模拟测试框架 (PHP Mocks Framework)...

别开诚
2023-12-01

FBMock

FBMock is a PHP mocking framework designed to be simple and easy to use.

Unlike other mocking frameworks, FBMock is basically just stubs with spies. Instead of using a custom DSL and relying on opaque tear-down verification, FBMock encourages developers to program simple return behaviors and only use spies when appropriate.

Requirements

HHVM or PHP 5.4+

Note: the framework's tests use PHPUnit but PHPUnit is not necessary for using FBMock.

Usage

Include init.php which sets up the autoloader

require_once YOUR_FBMOCKS_DIR.'/init.php'

Install using Composer (optional)

To install this package via composer, just add the package to require and start using it.

{

"require":{

"facebook/fbmock":"*@dev"

}

}

Creating a mock

mock('Foo')

Also, you can mock an interface in the same manner:

mock('IFoo')

Stubbing

By default, all methods return null. Helper methods for configuring return values are prefixed with 'mock'.

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

Sometimes, you need more control than mockReturn:

mock('Foo')->mockImplementation(

'bar',

function ($bar_type) {

return $bar_type == 1;

}

);

For other helpers (mockThrow, mockReturnThis, etc.) see Mock.php

Spying

$mock_foo = mock('Foo');

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

$code_under_test->doSomething($mock_foo);

// Returns array of calls

$mock_foo->mockGetCalls('bar');

If you are using PHPUnit, you can add FBMock_AssertionHelpers to your base PHPUnit_TestCase to get some spying helpers:

$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, ...);

Tips

Use multiset capabilities to improve legibility

mock('Foo')->mockReturn(array(

'bar' => 1,

'get' => 'data',

'run' => true,

))->mockReturnThis('set', 'addID', 'removeID');

Utilize the fluent interface for concise mock setup.

mock('Foo')

->mockReturn('bar', 1)

->mockThrow('other_method')

->mockImplementation('another_method', function () { /* ... */ })

->mockReturnThis('setData');

Use strict mocks when it's critical a method isn't called

If any unmocked method is called, the mock will throw.

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

// ...in code under test

$db_conn->write($some_data); // Throws FBMock_MockFrameworkException

Customizing

See CustomConfig-sample.php for instructions on customizing FBMock for your needs.

HHVM-only features

Mock final classes and classes with final methods

Mock internal classes

Community

We have a mailing list. If you're using FBMock, send us an email to say hi!

 类似资料: