¿Cómo se puede encontrar un método en PHPUnit invocado por la clase bajo el constructor de la prueba? El código simple a continuación, por ejemplo, no funcionará porque para el momento en que declaro el método tropezado, el trozo de objeto ya se ha creado y mi método se ha llamado, sin unir.Anulando un método llamado por el constructor de una clase
Clase de prueba:
class ClassA {
private $dog;
private $formatted;
public function __construct($param1) {
$this->dog = $param1;
$this->getResultFromRemoteServer();
}
// Would normally be private, made public for stubbing
public getResultFromRemoteServer() {
$this->formatted = file_get_contents('http://whatever.com/index.php?'.$this->dog);
}
public getFormatted() {
return ("The dog is a ".$this->formatted);
}
}
Código de ensayo:
class ClassATest extends PHPUnit_Framework_TestCase {
public function testPoodle() {
$stub = $this->getMockBuilder('ClassA')
->setMethods(array('getResultFromRemoteServer'))
->setConstructorArgs(array('dog52'))
->getMock();
$stub->expects($this->any())
->method('getResultFromRemoteServer')
->will($this->returnValue('Poodle'));
$expected = 'This dog is a Poodle';
$actual = $stub->getFormatted();
$this->assertEquals($expected, $actual);
}
}
Te escucho y acepto. El código de arriba acabo de aumentar por la facilidad de la ilustración, pero refleja el código en el que estoy trabajando. –
jontyc
Veré cómo hacer clic en la llamada remota más tarde se ajusta al código real. Era solo una de esas situaciones en las que originalmente no tenía una clase porque no era necesaria, pero la añadí por la facilidad de las pruebas y las burlas. – jontyc
@stebbo no dude en pasar por el chat si tiene alguna pregunta adicional. – Gordon