Mockery中的重载和别名有什么区别?

Hyd*_* B. 7 php tdd phpunit mockery

我是新来使用嘲弄和混淆的术语aliasoverload.任何人都可以向我解释何时使用哪个?

Fre*_*lin 21

Overload用于创建"实例模拟".当创建类的新实例并且将使用mock时,这将"拦截".例如,如果要测试此代码:

class ClassToTest {

    public function methodToTest()
    {
        $myClass = new MyClass();
        $result = $myClass->someMethod();
        return $result;
    }
}
Run Code Online (Sandbox Code Playgroud)

您将创建一个实例模拟使用overload并定义这样的期望:

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

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

     $this->assertEquals('someResult', $result);
 }
Run Code Online (Sandbox Code Playgroud)

Alias用于模拟公共静态方法.例如,如果要测试此代码:

class ClassToTest {

    public function methodToTest()
    {
        return MyClass::someStaticMethod();
    }
}
Run Code Online (Sandbox Code Playgroud)

您将创建一个别名模拟使用alias并定义这样的期望:

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

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

    $this->assertEquals('someResult', $result);
}
Run Code Online (Sandbox Code Playgroud)