Ich versuche, mehrere Methodenaufrufe zu verspotten. Wie in the documentation angegeben, das folgende Verfahren zu testen, ruft:Warum gibt Mockery deneter_getMyClass anstelle von MyClass zurück?
$object->foo()->bar()->zebra()->alpha()->selfDestruct();
Wir haben das folgende Stück Code verwenden können:
$mock = \Mockery::mock('CaptainsConsole');
$mock->shouldReceive('foo->bar->zebra->alpha->selfDestruct')->andReturn('Ten!');
So setzte ich es:
public function testProcessPayment()
{
$offerPayment = m::mock('MyApp\Model\Entity\OfferPayment');
$paymentTransaction = m::mock('MyApp\Model\Entity\PaymentTransaction');
$paymentTransaction->shouldReceive('getOfferPayment->getOffer')->andReturn($offerPayment);
$transactionManager = new TransactionManager();
$transactionManager->processPayment($paymentTransaction);
$this->assertInstanceOf('Offer', $paymentTransaction->getOfferPayment()->getOffer());
}
Die zugehörige Klasse :
class TransactionManager
{
public function processPayment(PaymentTransaction $paymentTransaction) {
$itemGroupEntity = $paymentTransaction->getOfferPayment()->getOffer();
}
}
ich:
Return value of Mockery_3_MyApp_Model_Entity_PaymentTransaction::getOfferPayment() must be an instance of MyApp\Model\Entity\OfferPayment, instance of Mockery_4__demeter_getOfferPayment returned
Implementierung von getOfferPayment und getOffer:
public function getOfferPayment() : OfferPayment
{
return $this->offerPayment;
}
public function getOffer() : Offer
{
return $this->offer;
}