2010-01-31 13 views
17

creé el siguiente interfaz:Creación de objetos de imitación de interfaz con sugerencia del tipo de método falla en PHPUnit

<?php 
interface Action 
{ 
    public function execute(\requests\Request $request, array $params); 
} 

Entonces trato de hacer un objeto de burla de esta interfaz con PHPUnit 3.4, pero me sale el siguiente error:

Error fatal: La declaración de Mock_Action_b389c0b1 :: execute() debe ser compatible con la de Action :: execute() en D: \ Xampp \ xampp \ php \ PEAR \ PHPUnit \ Framework \ TestCase.php (1121): eval() 'd código en la línea 2

Miré a través de la traza de pila que obtuve de PHPU nit y encontró que se crea un objeto de burla que implementa la interfaz de acción, sino que crea el método ejecutar de la siguiente manera:

<?php 
public function execute($request, array $params) 

Como se puede ver, PHPUnit se hace cargo de la matriz sugerencia del tipo, pero se olvida de \ solicitudes \ Solicitud. Lo que obviamente conduce a un error. ¿Alguien sabe una solución para este error?

También lo probé sin espacios de nombres, pero sigo recibiendo el mismo error.

+2

Marca, ¿cómo creas el simulacro? –

Respuesta

23

Quizás un poco tarde.

Tuve exactamente este mismo problema y resultó que el tipo insinuado no estaba cargado y no se podía cargar. Como resultado, ReflectionParameter de PHP no devuelve el nombre de clase, y el generador de simulacro de PHPUnit no lo incluye.

Si se asegura de que el tipo sugerido se carga o carga con la función de carga automática, debería funcionar.

+0

Nunca es demasiado tarde: esto me ayudó inmensamente 6 años después. Mi problema era que el espacio de nombres no coincidía con la estructura del directorio después de un refactor descuidado, por lo que no era cargable en PSR4. Es un problema oscuro ya que el generador de simulacros no advierte en absoluto, ¡solo crea una clase aleatoria! Lo diagnostiqué tratando de crear una clase de hija falsa manual en su lugar y, por supuesto, eso mostró el problema del espacio de nombres con bastante rapidez. – scipilot

Cuestiones relacionadas