В чем разница между перегрузкой и псевдонимом в Mockery?

Я новичок в использовании насмешек и запутался в терминологии alias и overload. Кто-нибудь может объяснить мне, когда что использовать?


person Hyder B.    schedule 04.07.2015    source источник


Ответы (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);
}
person Fredrik Salin    schedule 01.07.2016
comment
Спасибо, Фредерик! - person Hyder B.; 01.07.2016

Я нашел это: 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). Макет источника никогда не проверяется, поскольку он использует хранилище ожиданий для новых экземпляров. Для этой цели мы используем термин «мока-экземпляр», чтобы отличить его от более простого «мока-псевдонима».

Так что мне кажется, что перегрузка делает то же самое, что и псевдоним, с той разницей, что она также импортирует ожидания от макета источника.

person R3KHYT    schedule 04.07.2015