Я новичок в использовании Mockery и путают с терминологией alias
и overload
. Может ли кто-нибудь объяснить мне, когда использовать?В чем разница между перегрузкой и псевдонимом в Mockery?
ответ
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');
Приставка действительное имя класса (который в данный момент не загружен) с «псевдоним:» создаст «псевдоним издеваться». Alias mocks создают псевдоним класса с заданным классом в stdClass и обычно используются для включения в насмешку публичных статических методов. Ожидания, установленные на новом макетном объекте, которые ссылаются на статические методы, будут использоваться всеми статическими вызовами этого класса.
$mock = \Mockery::mock('overload:MyNamespace\MyClass');
Приставка действительное имя класса (который в данный момент не загружен) с «перегрузкой:» будет генерировать псевдоним издеваться (как с «псевдонимом:») за исключением того, созданы новые экземпляры этого класса будут импортируйте любые ожидания, установленные в исходном макете ($ mock). Исходный макет никогда не проверяется, так как он использует хранилище ожиданий для новых экземпляров. Для этой цели мы используем термин «экземпляр макета», чтобы отличить его от более простого «псевдонима».
Так что мне кажется, что перегрузка делает то же самое, что и псевдоним с той разницей, что он также импортирует ожидания от исходного макета.
Спасибо Фредерик! –
Этот пример более ясен, чем в документе. – eddy147