2017-02-12 3 views
0

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; 
} 

Antwort

0

In diesem Fall wird Mockery nicht return type declarations unterstützen. Das Problem kann durch Entfernen Rückgabetyp Erklärungen festgelegt werden für die Getter:

public function getOfferPayment() 
{ 
    return $this->offerPayment; 
} 


public function getOffer() 
{ 
    return $this->offer; 
} 
Verwandte Themen