Mockery 中的重载和别名有什么区别?
What is the difference between overload and alias in Mockery?
我是 Mockery 的新手,对术语 alias
和 overload
感到困惑。谁能给我解释一下什么时候用哪个?
我发现了这个:
https://github.com/padraic/mockery-docs/blob/master/reference/startup_methods.rst
$mock = \Mockery::mock('alias:MyNamespace\MyClass');
在 class(当前未加载)的有效名称前加上 "alias:" 将生成 "alias mock"。 Alias mocks 使用给定的 classname 为 stdClass 创建一个 class 别名,通常用于启用 public 静态方法的模拟。对引用静态方法的新模拟对象设置的期望将被对此 class.
的所有静态调用使用
$mock = \Mockery::mock('overload:MyNamespace\MyClass');
在 class(当前未加载)的有效名称前加上 "overload:" 将生成别名模拟(与 "alias:" 一样),除了创建的 class 的新实例将导入在原始模拟 ($mock) 上设置的任何期望。原始模拟从未经过验证,因为它使用了新实例的期望存储。为此,我们使用术语 "instance mock" 来区别于更简单的 "alias mock".
所以对我来说,重载似乎与别名的作用相同,不同之处在于它还从原始模拟中导入期望。
Overload
用于创建一个"instance mock"。当创建 class 的新实例时,这将 "intercept" 并将使用模拟。例如,如果要测试此代码:
class ClassToTest {
public function methodToTest()
{
$myClass = new MyClass();
$result = $myClass->someMethod();
return $result;
}
}
您将使用 overload
创建一个模拟实例,并像这样定义期望:
public function testMethodToTest()
{
$mock = Mockery::mock('overload:MyClass');
$mock->shouldreceive('someMethod')->andReturn('someResult');
$classToTest = new ClassToTest();
$result = $classToTest->methodToTest();
$this->assertEquals('someResult', $result);
}
Alias
用于模拟 public 静态方法。例如,如果要测试此代码:
class ClassToTest {
public function methodToTest()
{
return MyClass::someStaticMethod();
}
}
您将使用 alias
创建别名模拟并定义如下期望:
public function testNewMethodToTest()
{
$mock = Mockery::mock('alias:MyClass');
$mock->shouldreceive('someStaticMethod')->andReturn('someResult');
$classToTest = new ClassToTest();
$result = $classToTest->methodToTest();
$this->assertEquals('someResult', $result);
}
我是 Mockery 的新手,对术语 alias
和 overload
感到困惑。谁能给我解释一下什么时候用哪个?
我发现了这个: https://github.com/padraic/mockery-docs/blob/master/reference/startup_methods.rst
$mock = \Mockery::mock('alias:MyNamespace\MyClass');
在 class(当前未加载)的有效名称前加上 "alias:" 将生成 "alias mock"。 Alias mocks 使用给定的 classname 为 stdClass 创建一个 class 别名,通常用于启用 public 静态方法的模拟。对引用静态方法的新模拟对象设置的期望将被对此 class.
的所有静态调用使用$mock = \Mockery::mock('overload:MyNamespace\MyClass');
在 class(当前未加载)的有效名称前加上 "overload:" 将生成别名模拟(与 "alias:" 一样),除了创建的 class 的新实例将导入在原始模拟 ($mock) 上设置的任何期望。原始模拟从未经过验证,因为它使用了新实例的期望存储。为此,我们使用术语 "instance mock" 来区别于更简单的 "alias mock".
所以对我来说,重载似乎与别名的作用相同,不同之处在于它还从原始模拟中导入期望。
Overload
用于创建一个"instance mock"。当创建 class 的新实例时,这将 "intercept" 并将使用模拟。例如,如果要测试此代码:
class ClassToTest {
public function methodToTest()
{
$myClass = new MyClass();
$result = $myClass->someMethod();
return $result;
}
}
您将使用 overload
创建一个模拟实例,并像这样定义期望:
public function testMethodToTest()
{
$mock = Mockery::mock('overload:MyClass');
$mock->shouldreceive('someMethod')->andReturn('someResult');
$classToTest = new ClassToTest();
$result = $classToTest->methodToTest();
$this->assertEquals('someResult', $result);
}
Alias
用于模拟 public 静态方法。例如,如果要测试此代码:
class ClassToTest {
public function methodToTest()
{
return MyClass::someStaticMethod();
}
}
您将使用 alias
创建别名模拟并定义如下期望:
public function testNewMethodToTest()
{
$mock = Mockery::mock('alias:MyClass');
$mock->shouldreceive('someStaticMethod')->andReturn('someResult');
$classToTest = new ClassToTest();
$result = $classToTest->methodToTest();
$this->assertEquals('someResult', $result);
}