phpunit-Testmethode, die andere Klassenmethoden aufruft, die nachgemacht werden müssen

Ich versuche, einen hübschen Standard-Unit-Test zu erstellen, bei dem ich eine Methode aufrufe und deren Antwort bestätige. Die Methode, die ich teste, ruft jedoch eine andere Methode in derselben Klasse auf, die ein wenig schweres Heben bewirkt.

Ich möchte diese eine Methode verspotten, aber trotzdem die Methode ausführen, die ich teste, nur mit dem verspotteten Wert, der vom Aufruf an die andere Methode zurückgegeben wurde.

Ich habe das Beispiel durchgespielt, um es so einfach wie möglich zu machen.

class MyClass
{

    // I want to test this method, but mock the handleValue method to always return a set value.

    public function testMethod($arg)
    {

        $value = $arg->getValue();

        $this->handleValue($value);

    }


    // This method needs to be mocked to always return a set value.

    public function handleValue($value)
    {

        // Do a bunch of stuff...
        $value += 20;

        return $value;

    }

}

Mein Versuch, die Tests zu schreiben.

class MyClassTest extends \PHPUnit_Framework_TestCase
{


    public function testTheTestMethod()
    {

        // mock the object that is passed in as an arg
        $arg = $this->getMockBuilder('SomeEntity')->getMock();
        $arg->expects($this->any())
            ->method('getValue')
            ->will($this->returnValue(10));

        // test handle document()
        $myClass = new MyClass();

        $result = $myClass->testMethod($arg);

        // assert result is the correct
        $this->assertEquals($result, 50);

    }

}

Ich habe versucht, das MyClass-Objekt zu verspotten, aber wenn ich das tue und testMethod aufrufe, gibt es immer null zurück. Ich brauche eine Möglichkeit, die eine Methode zu verspotten, aber den Rest des Objekts intakt zu lassen.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage