2012-07-26 14 views
6

Estoy intentando crear una maqueta para satisfacer una typehint con este código (burla):marcos Mock vuelve clase con diferente nombre y tipo

return \Mockery::mock('\Contracts\Helpers\iFileSystemWrapper'); 

o esto (PHPUnit):

return $this->getMock('\Contracts\Helpers\iFileSystemWrapper'); 

Pero el simulacro devuelto se llama Mockery\Mock Object o Mock_iFileSystemWrapper_a5f91049. ¿Cómo se supone que debo tipear esto cuando no es una instancia de lo que necesito en absoluto con ninguno de los marcos?

¿Por qué exactamente es el marco simulacro el que intenta cargar la clase real? Si quisiera la clase real, incluiría la clase real.

Este problema me ha frenado tantas veces cuando escribo pruebas que estoy a punto de arrojar algo que hace alusión a la ventana y verificar los nombres de las clases, o simplemente usar objetos de producción ya que los burladores son difíciles de usar.

+1

Mostrar resultado de 'var_dump ($ simulacros instanceof \ \ contratos Ayudantes \ iFileSystemWrapper);' 'donde $ mock' es lo que devuelve el código – zerkms

+0

' bool (false) '- – Seralize

+0

eso es extraño: -S – zerkms

Respuesta

-2

Necesita utilizar una función especial para verificar la clase base. algo como esto:

$mock = $this->getMock('MyClass'); 
$this->assertInstanceOf('MyClass', $mock); 
+0

Esto solo prueba que el objeto simulado es una instancia de la clase o interfaz que ya diste, que en realidad solo está probando el marco de prueba :-) Sin embargo, si usas una instrucción 'if' y' instanceof', entonces un IDE bueno dejará de mostrarle su advertencia de "tipo de parámetro inválido". – leftclickben

2

acabo experimentado con un análisis existente de la mía, y cambiando el nombre de la interfaz de espacio de nombres de uno que existe para uno que no existe, me dieron exactamente lo mismo que lo que describe (usando phpunit). Mi objeto simulado tenía el nombre de clase Mock_ViewInterface_c755461e. Cuando lo cambio de nuevo al nombre de la interfaz correcta, funciona bien.

Por tanto, yo diría que, o bien:

  1. que están tratando de utilizar un nombre de interfaz que no existe (por ejemplo, un error tipográfico o desaparecidos componente espacio de nombres).
  2. Su código de la biblioteca no se está cargando por alguna razón, p. la carga automática no está configurada correctamente en la rutina de arranque de prueba de su unidad.
Cuestiones relacionadas