PHPUnit Stubbing Sınıf yöntemleri "final" olarak ilan

0 Cevap php

PHPUnit onu alay edemez bu yüzden bir alay kullanarak başka bir sınıfın yöntemini çağıran bir sınıf yöntemi için bir birim test yazıyorum, çağrılması gereken tek yöntem, nihai olarak ilan edilir. Ben alabilir, farklı bir yaklaşım var mı?

Örnek:

alay sınıf

class Class_To_Mock
{
    final public function needsToBeCalled($options)
    {
        ...
    }
}

Benim test case

class MyTest extends PHPUnit_Framework_TestCase
{
    public function testDoSomething()
    {
        $alay = $this->getMock('Class_To_Mock', array('needsToBeCalled'));
        $alay->expects($this->once())
             ->method('needsToBeCalled')
             ->with($this->equalTo(array('option'));
    }
}

Edit: Mike B tarafından sağlanan çözümünü kullanarak ve size o (doğru nesne pasör geçirildi sağlamak için) tür denetimi yapmasının alay ediyorlar nesne için bir ayarlayıcı / getter varsa, size getter alay gerekir sınıfı test ediyoruz ve bu diğer alay dönün.

Örnek:

alay sınıf

class Class_To_Mock
{
    final public function needsToBeCalled($options)
    {
        ...
    }
}

alay

class Class_To_MockMock
{
    public function needsToBeCalled($options)
    {
        ...
    }
}

Test edilecek class

class Class_To_Be_Tested
{
    public function setClassToMock(Class_To_Mock $classToMock)
    {
        ...
    }

    public function getClassToMock()
    {
        ...
    }

    public function doSomething()
    {
        $this->getClassToMock()
             ->needsToBeCalled(array('option'));
    }
}

Benim test case

class MyTest extends PHPUnit_Framework_TestCase
{
    public function testDoSomething()
    {
        $classToTest = $this->getMock('Class_To_Be_Tested', array('getClassToMock'));

        $alay = $this->getMock('Class_To_MockMock', array('needsToBeCalled'));

        $classToTest->expects($this->any())
                    ->method('getClassToMock')
                    ->will($this->returnValue($alay));

        $alay->expects($this->once())
             ->method('needsToBeCalled')
             ->with($this->equalTo(array('option'));

        $classToTest->doSomething();
    }
}

0 Cevap