I want to test this code block which has to call a static class.
class SomeModule {
public function processFoo()
{
$foo = FooFactory::getFoo();
// ... Do something to $foo
return $foo;
}
}
I can't modify the static class. I can however change the code inside the module. How can I refactor this code to be unit testable?
Refactored code:
class SomeModule {
public function processFoo()
{
$foo = $this->getFoo();
$foo['hoopla'] = 'doo';
return $foo;
}
protected function getFoo()
{
return FooFactory::getFoo();
}
}
Test code:
function testSomeModule() {
// Whatever we want to simulate FooFactory::getFoo returning
$foo = array('woo' => 'yay')
// Create a copy of the class which mocks the method getFoo
$module = $this->getMockBuilder('SomeModule')
->setMethods(array('getFoo'))
->getMock();
// Rig the mock method to return our prepared sample
$module->expects($this->once())
->method('getFoo')
->will($this->returnValue($foo));
$result = $module->processFoo();
$this->assertEquals('yay', $result['woo']);
$this->assertEquals('doo', $result['hoopla']);
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With