Estoy intentando probar una clase de interfaz de servicio web usando PHPUnit. Básicamente, esta clase realiza llamadas a un objeto SoapClient. Estoy intentando probar esta clase en PHPUnit utilizando el método getMockFromWsdl
describe aquí:Cómo probar un servicio web en PHPUnit a través de pruebas múltiples?
Sin embargo, ya que quiero probar varios métodos de esta misma clase, cada vez que la configuración del objeto, también tengo que configurar el simulacro WSDL SoapClient objeto. Esto está causando un error fatal que se lance:
Fatal error: Cannot redeclare class xxxx in C:\web\php5\PEAR\PHPUnit\Framework\TestCase.php(1227) : eval()'d code on line 15
¿Cómo puedo utilizar el mismo objeto de burla a través de múltiples pruebas sin tener que regenerarlo fuera del WSDL cada vez? Eso parece ser un problema.
-
a haber sido invitado a publicar algo de código a la vista, aquí está el método de configuración en el TestCase:
protected function setUp() {
parent::setUp();
$this->client = new Client();
$this->SoapClient = $this->getMockFromWsdl(
'service.wsdl'
);
$this->client->setClient($this->SoapClient);
}
he publicado algo de código en la pregunta para su revisión. Colocar en una clase_existe no parece que resolvería el problema, ya que todavía tienes que recuperar el objeto falso de alguna manera y esta clase siempre ejecutará esa evaluación. ¿A menos que tuviera que modificar PHPUnit? ¿Qué tienes en mente en dónde colocar el método class_exists()? – scraton
No. Detener. PHPUnit no * * necesita modificación. Seriamente. ¿Por qué estás usando eval? La clase que ejecuta eval es el problema. La comprobación 'class_exists' es solo una sugerencia de hack para evitar la re-declaración de una clase preexistente. Esta comprobación debe realizarse dentro de la clase que realiza "eval". – pestilence669
PHPUnit llama al código de evaluación, no a mi propio código. Creo que tiene algo que ver con cuando analiza el WSDL y crea objetos falsos fuera de esa definición. – scraton