2011-09-15 15 views
33

Cuando creo un nuevo simulacro, necesito llamar al método de espera. ¿Qué es exactamente? ¿Qué hay de sus argumentos?PHPUnit: espera que el método signifique

$todoListMock = $this->getMock('\Model\Todo_List'); 
     $todoListMock->expects($this->any()) 
      ->method('getItems') 
      ->will($this->returnValue(array($itemMock))); 

No puedo encontrar la razón en cualquier lugar (He intentado docs). He leído las fuentes, pero no puedo entenderlo. Gracias.

Respuesta

37

Espera() - Establece el número de veces que esperan un método que se llamará:

$mock = $this->getMock('nameOfTheClass', array('firstMethod','secondMethod','thirdMethod')); 
$mock->expects($this->once()) 
    ->method('firstMethod') 
    ->will($this->returnValue('value')); 
$mock->expects($this->once()) 
    ->method('secondMethod') 
    ->will($this->returnValue('value')); 
$mock->expects($this->once()) 
    ->method('thirdMethod') 
    ->will($this->returnValue('value')); 

Si usted sabe, ese método se llama una vez usar $ this > una vez() en espera(), de lo contrario use $ this-> any()

ver:
PHPUnit mock with multiple expects() calls

https://phpunit.de/manual/current/en/test-doubles.html#test-doubles.stubs

http://www.slideshare.net/mjlivelyjr/advanced-phpunit-testing

+1

¿Qué sucede si se llama una vez y luego se vuelve a llamar? – thom

+0

si se va a llamar al método una vez más, la prueba probablemente fallará –

+12

no solo * probablemente *, sino * definitivamente *;) – Gordon

41

Una mirada en el código fuente le dirá:

/** 
* Registers a new expectation in the mock object and returns the match 
* object which can be infused with further details. 
* 
* @param PHPUnit_Framework_MockObject_Matcher_Invocation $matcher 
* @return PHPUnit_Framework_MockObject_Builder_InvocationMocker 
*/ 
public function expects(PHPUnit_Framework_MockObject_Matcher_Invocation $matcher); 

y el manual de PHPUnit enumera el comparadores disponibles en

  • cualquier () devuelve una coincidencia que coincide cuando el método para el que se evalúa se ejecuta cero o más veces.
  • nunca() devuelve una coincidencia que coincide cuando el método para el que se evalúa nunca se ejecuta.
  • atLeastOnce() devuelve una coincidencia que coincide cuando el método para el que se evalúa se ejecuta al menos una vez.
  • once() devuelve una coincidencia que coincide cuando el método para el que se evalúa se ejecuta exactamente una vez.
  • exactamente (int $ count) devuelve una coincidencia que coincide cuando el método para el que se evalúa se ejecuta exactamente $ count veces.
  • at (int $ index) devuelve una coincidencia que coincide cuando se invoca el método para el que se evalúa en el índice $ dado.
+1

Tenga en cuenta que en() comienza a 0. He descubierto que la manera dura a través de algún ensayo y error en la actualidad. – PressingOnAlways

+3

También tenga en cuenta que 'at()' utiliza el mismo contador para TODOS los métodos de prueba en su objeto de prueba. NO asigna un contador nuevo a cada método. – ankr

Cuestiones relacionadas