替代的 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');