2017-02-12 63 views
0

我尝试模拟多个方法调用。如前所述in the documentation,测试以下方法调用:为什么Mockery返回demeter_getMyClass而不是MyClass?

$object->foo()->bar()->zebra()->alpha()->selfDestruct(); 

我们可以使用下面的代码:

$mock = \Mockery::mock('CaptainsConsole'); 
$mock->shouldReceive('foo->bar->zebra->alpha->selfDestruct')->andReturn('Ten!'); 

所以,我实现它:

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

的相关类:

class TransactionManager 
{ 
    public function processPayment(PaymentTransaction $paymentTransaction) { 
     $itemGroupEntity = $paymentTransaction->getOfferPayment()->getOffer(); 
    } 
} 

我得到:

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


getOfferPayment和getOffer的执行情况:

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


public function getOffer() : Offer 
{ 
    return $this->offer; 
} 

回答

0

在这种情况下,嘲弄不支持return type declarations。 该问题可以通过固定取出返回类型声明的干将:

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


public function getOffer() 
{ 
    return $this->offer; 
} 
相关问题