Я новичок в использовании насмешек и запутался в терминологии alias
и overload
. Кто-нибудь может объяснить мне, когда что использовать?
В чем разница между перегрузкой и псевдонимом в Mockery?
Ответы (2)
Overload
используется для создания «экземпляра макета». Это будет «перехватывать», когда создается новый экземпляр класса, и вместо этого будет использоваться макет. Например, если этот код должен быть протестирован:
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
используется для имитации общедоступных статических методов. Например, если этот код должен быть протестирован:
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);
}
Я нашел это: https://github.com/padraic/mockery-docs/blob/master/reference/startup_methods.rst
$mock = \Mockery::mock('alias:MyNamespace\MyClass');
Добавление префикса "псевдоним:" к действительному имени класса (который в данный момент НЕ загружен) приведет к созданию "фиктивного псевдонима". Псевдонимы создают псевдоним класса с заданным именем класса для stdClass и обычно используются для включения имитации общедоступных статических методов. Ожидания, установленные для нового фиктивного объекта, которые ссылаются на статические методы, будут использоваться всеми статическими вызовами этого класса.
$mock = \Mockery::mock('overload:MyNamespace\MyClass');
Добавление префикса допустимого имени класса (который в данный момент НЕ загружен) с помощью префикса "overload:" приведет к созданию имитации псевдонима (как в случае с "alias:"), за исключением того, что созданные новые экземпляры этого класса будут импортировать любые ожидания, установленные в имитация происхождения ($ mock). Макет источника никогда не проверяется, поскольку он использует хранилище ожиданий для новых экземпляров. Для этой цели мы используем термин «мока-экземпляр», чтобы отличить его от более простого «мока-псевдонима».
Так что мне кажется, что перегрузка делает то же самое, что и псевдоним, с той разницей, что она также импортирует ожидания от макета источника.