I'm trying to create a pretty standard unit test where I call a method and assert it's response, however the method I'm testing calls another method inside the same class which does a little bit of heavy lifting.
I want to mock that one method but still execute the method I'm testing as is, only with the mocked value returned from the call to the other method.
I've dumbed down the example to make it as simple as possible.
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; } } My attempt at writing the tests.
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); } } I have tried mocking the MyClass object, but when I do that and call the testMethod it always returns null. I need a way to mock the one method but leave the rest of the object intact.