no estoy seguro de que esto es lo que está buscando, así que por favor deje un comentario:
class StubTest extends PHPUnit_Framework_TestCase
{
public function testChainingStub()
{
// Creating the stub with the methods to be called
$stub = $this->getMock('Zend_Db_Select', array(
'select', 'where', 'limit', 'execute'
), array(), '', FALSE);
// telling the stub to return a certain result on execute
$stub->expects($this->any())
->method('execute')
->will($this->returnValue('expected result'));
// telling the stub to return itself on any other calls
$stub->expects($this->any())
->method($this->anything())
->will($this->returnValue($stub));
// testing that we can chain the stub
$this->assertSame(
'expected result',
$stub->select('my_table')
->where(array('my_field'=>'a_value'))
->limit(1)
->execute()
);
}
}
Esto se puede combinar con las expectativas:
class StubTest extends PHPUnit_Framework_TestCase
{
public function testChainingStub()
{
// Creating the stub with the methods to be called
$stub = $this->getMock('Zend_Db_Select', array(
'select', 'where', 'limit', 'execute'
), array(), '', FALSE);
// overwriting stub to return something when execute is called
$stub->expects($this->exactly(1))
->method('execute')
->will($this->returnValue('expected result'));
$stub->expects($this->exactly(1))
->method('limit')
->with($this->equalTo(1))
->will($this->returnValue($stub));
$stub->expects($this->exactly(1))
->method('where')
->with($this->equalTo(array('my_field'=>'a_value')))
->will($this->returnValue($stub));
$stub->expects($this->exactly(1))
->method('select')
->with($this->equalTo('my_table'))
->will($this->returnValue($stub));
// testing that we can chain the stub
$this->assertSame(
'expected result',
$stub->select('my_table')
->where(array('my_field'=>'a_value'))
->limit(1)
->execute()
);
}
}
Puede por favor aclarar si desea burlarse del objeto, por ejemplo, averiguar si se invoca o resguardar el valor de retorno de una llamada a un método. O en otras palabras, explique para qué está intentando usar el doble de prueba. – Gordon
@Gordon Lo siento, tiendo a usar los términos simulacro y resguardo indistintamente. Mal hábito. En todo mi conjunto de pruebas, me gustaría hacer las dos cosas. Por lo tanto, en este ejemplo, podría resguardar el valor de retorno de una consulta de selección, pero simular una inserción. Si tiene sugerencias para uno u otro, eso ayudaría. Gracias. –
lo siento, todavía no entiendo completamente lo que estás tratando de hacer. ¿Podrías mostrar el caso de prueba por favor? – Gordon