2016-12-03 107 views
1

我有一個測試失敗,而在預言PHPUnit的比較一些接口和嘲笑resutls:預言,嘲笑在PHP單元測試比較,以及預期

<?php 

namespace AppBundle\Test\Service\Message; 


use AppBundle\Service\Message\RabbitMqMessageProducerProvider; 
use OldSound\RabbitMqBundle\RabbitMq\ProducerInterface; 
use PHPUnit_Framework_TestCase; 
use Prophecy\Prophecy\ObjectProphecy; 

/** 
* Class RabbitMqMessageProducerProviderTest 
* @package AppBundle\Test\Service\Message 
*/ 
class RabbitMqMessageProducerProviderTest extends PHPUnit_Framework_TestCase 
{ 
    public function testProvide() 
    { 
     /** @var ProducerInterface|ObjectProphecy $lowProducer */ 
     $lowProducer = self::prophesize(ProducerInterface::class); 

     /** @var ProducerInterface|ObjectProphecy $mediumProducer */ 
     $mediumProducer = self::prophesize(ProducerInterface::class); 

     /** @var ProducerInterface|ObjectProphecy $highProducer */ 
     $highProducer = self::prophesize(ProducerInterface::class); 

     $provider = new RabbitMqMessageProducerProvider(
      $lowProducer->reveal(), 
      $mediumProducer->reveal(), 
      $highProducer->reveal() 
     ); 

     self::assertSame($lowProducer, $provider->provide(1)); 
     self::assertSame($mediumProducer, $provider->provide(11)); 
     self::assertSame($highProducer, $provider->provide(101)); 
    } 
} 

這些都是resutls:

Failed asserting that two variables reference the same object. 

任何幫助將不勝感激。謝謝。

下一塊代碼是我正在測試的代碼。

<?php 

namespace AppBundle\Service\Message; 


use OldSound\RabbitMqBundle\RabbitMq\ProducerInterface; 

/** 
* Class RabbitMqMessageProducerProvider 
* @package AppBundle\Service\Message 
*/ 
class RabbitMqMessageProducerProvider 
{ 
    /** 
    * @var ProducerInterface 
    */ 
    private $lowPriorityProducer; 

    /** 
    * @var ProducerInterface 
    */ 
    private $mediumPriorityProducer; 

    /** 
    * @var ProducerInterface 
    */ 
    private $highPriorityProducer; 

    /** 
    * RabbitMqMessageProducerProvider constructor. 
    * 
    * @param ProducerInterface $lowPriorityProducer 
    * @param ProducerInterface $mediumPriorityProducer 
    * @param ProducerInterface $highPriorityProducer 
    */ 
    public function __construct(
     ProducerInterface $lowPriorityProducer, 
     ProducerInterface $mediumPriorityProducer, 
     ProducerInterface $highPriorityProducer 
    ) 
    { 
     $this->lowPriorityProducer = $lowPriorityProducer; 
     $this->mediumPriorityProducer = $mediumPriorityProducer; 
     $this->highPriorityProducer = $highPriorityProducer; 
    } 


    /** 
    * @param int $priority 
    * @return ProducerInterface 
    */ 
    public function provide(int $priority) 
    { 
     $priorityRange = log10($priority); 

     if ($priorityRange < 2) { 
      return $this->lowPriorityProducer; 
     } 

     if ($priorityRange < 3) { 
      return $this->mediumPriorityProducer; 
     } 

     return $this->highPriorityProducer; 
    } 
} 
+0

可以顯示類的被測的源代碼? – Matteo

+0

當然,我要將代碼添加到問題主體@Matteo – zioMitch

+0

log10(11)= 1.0413926851582因此第二個斷言正確失敗。嘗試添加一條消息作爲第二個第三個參數,以查看哪些測試失敗。 – Matteo

回答

0
/** @var ProducerInterface|ObjectProphecy $lowProducer */ 
$lowProducer = self::prophesize(ProducerInterface::class); 
$lowProducer = $lowProducer->reveal(); 

/** @var ProducerInterface|ObjectProphecy $mediumProducer */ 
$mediumProducer = self::prophesize(ProducerInterface::class); 
$mediumProducer = $mediumProducer->reveal(); 

/** @var ProducerInterface|ObjectProphecy $highProducer */ 
$highProducer = self::prophesize(ProducerInterface::class); 
$highProducer = $highProducer->reveal(); 

$provider = new RabbitMqMessageProducerProvider(
    $lowProducer, 
    $mediumProducer, 
    $highProducer 
); 

self::assertSame($lowProducer, $provider->provide(1)); 
self::assertSame($mediumProducer, $provider->provide(101)); 
self::assertSame($highProducer, $provider->provide(1001));