Lzh on GitHub

替代的 shouldReceive 语法

从 Mockery 1.0.0 开始,我们支持像调用任何 PHP 方法一样调用方法,而不是将方法名作为字符串参数传递给 Mockery 的 should* 方法。

从 Mockery 1.0.0 开始,我们支持像调用任何 PHP 方法一样调用方法,而不是将方法名作为字符串参数传递给 Mockery 的 should* 方法。

实现此功能的两个 Mockery 方法是 allows()expects()

Allows(允许)

当我们为返回预定义值的存根方法创建模拟时,我们使用 allows(),并且我们不关心这些方法被调用了多少次,甚至是否被调用。

$mock = \Mockery::mock('MyClass');
$mock->allows([
    'name_of_method_1' => 'return value',
    'name_of_method_2' => 'return value',
]);

这与以下 shouldReceive 语法等效:

$mock = \Mockery::mock('MyClass');
$mock->shouldReceive([
    'name_of_method_1' => 'return value',
    'name_of_method_2' => 'return value',
]);

请注意,使用这种格式,我们还告诉 Mockery 我们不关心存根方法的参数。

如果我们确实关心参数,我们会这样做:

$mock = \Mockery::mock('MyClass');
$mock->allows()
    ->name_of_method_1($arg1)
    ->andReturn('return value');

这与以下 shouldReceive 语法等效:

$mock = \Mockery::mock('MyClass');
$mock->shouldReceive('name_of_method_1')
    ->with($arg1)
    ->andReturn('return value');

Expects(期望)

当我们要验证某个特定方法是否被调用时,我们使用 expects()

$mock = \Mockery::mock('MyClass');
$mock->expects()
    ->name_of_method_1($arg1)
    ->andReturn('return value');

这与以下 shouldReceive 语法等效:

$mock = \Mockery::mock('MyClass');
$mock->shouldReceive('name_of_method_1')
    ->once()
    ->with($arg1)
    ->andReturn('return value');

默认情况下,expects() 设置一个期望,即该方法应该且只应该被调用一次。如果我们期望该方法被调用不止一次,我们可以更改该期望:

$mock = \Mockery::mock('MyClass');
$mock->expects()
    ->name_of_method_1($arg1)
    ->twice()
    ->andReturn('return value');