io non sono sicuro che questo è quello che stai cercando, quindi si prega di lasciare un commento:
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()
);
}
}
È possibile combinare questo con le aspettative:
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()
);
}
}
Potete per favore chiarire se si vuole prendere in giro l'oggetto, ad esempio, scoprire se è stato invocato o stubato il valore di ritorno di una chiamata di metodo. O in altre parole, per favore spiega cosa stai provando a usare il test double per. – Gordon
@Gordon Spiacente, tendo ad usare i termini mock e stub in modo intercambiabile. Cattiva abitudine. Nella mia intera suite di test, mi piacerebbe fare entrambe le cose. Quindi in questo esempio, potrei stubare il valore di ritorno di una query selezionata, ma prendere in giro un inserto. Se hai suggerimenti per l'uno o l'altro, sarebbe d'aiuto. Grazie. –
scusa, non capisco ancora cosa stai cercando di fare. Potresti mostrare il testcase per favore? – Gordon