Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is the difference between overload and alias in Mockery?

I am new to using Mockery and confused with the terminology alias and overload. Can anyone please explain to me when to use which?

like image 854
Hyder B. Avatar asked Jul 04 '15 10:07

Hyder B.


1 Answers

Overload is used to create an "instance mock". This will "intercept" when a new instance of a class is created and the mock will be used instead. For example if this code is to be tested:

class ClassToTest {

    public function methodToTest()
    {
        $myClass = new MyClass();
        $result = $myClass->someMethod();
        return $result;
    }
}

You would create an instance mock using overload and define the expectations like this:

 public function testMethodToTest()
 {
     $mock = Mockery::mock('overload:MyClass');
     $mock->shouldreceive('someMethod')->andReturn('someResult');

     $classToTest = new ClassToTest();
     $result = $classToTest->methodToTest();

     $this->assertEquals('someResult', $result);
 }

Alias is used to mock public static methods. For example if this code is to be tested:

class ClassToTest {

    public function methodToTest()
    {
        return MyClass::someStaticMethod();
    }
}

You would create an alias mock using alias and define the expectations like this:

public function testNewMethodToTest()
{
    $mock = Mockery::mock('alias:MyClass');
    $mock->shouldreceive('someStaticMethod')->andReturn('someResult');

    $classToTest = new ClassToTest();
    $result = $classToTest->methodToTest();

    $this->assertEquals('someResult', $result);
}
like image 194
Fredrik Schöld Avatar answered Sep 20 '22 13:09

Fredrik Schöld